我是新手,所以请原谅我的行话。
我分两部分运行以下代码:
select * from #table1
where date between 20120101 and 20120131
select * from #table2
where date between 20120101 and 20120131
我有很多这样的小片段,我必须单独运行才能看到每次运行的结果。但是,当我需要这样做的时候,我每个月都会更改日期。
所以,我想知道是否有类似的东西:
declare startdate = 20120101
declare enddate = 20120131
select * from #table1
where date between startdate and enddate
select * from #table2
where date between startdate and enddate
我的想法是,我会声明startdate
和enddate
变量,然后我可以运行剩余的select语句,而无需单独更新每个变量。
答案 0 :(得分:6)
你非常接近。只需要清理一下语法。变量用“@”符号和数据类型声明。
DECLARE @startdate DATETIME
SET @startdate = '2012-01-01'
DECLARE @enddate DATETIME
SET @enddate = '2012-01-31'
SELECT * FROM #table1
WHERE date BETWEEN @startdate AND @enddate
SELECT * FROM #table2
WHERE date BETWEEN @startdate AND @enddate
作为旁注,使用BETWEEN和日期测试时要小心,因为它可能会让人感到困惑,因为每个日期默认为午夜时间。所以,正如所写,你将在午夜后找不到'2012-01-31'的任何记录。恕我直言,通过将你的结束日期提高一天并进行如下测试来明确这一点:
DECLARE @startdate DATETIME
SET @startdate = '2012-01-01'
DECLARE @enddate DATETIME
SET @enddate = '2012-02-01'
SELECT * FROM #table1
WHERE date >= @startdate
AND date < @enddate
答案 1 :(得分:1)
假设您在一个脚本中运行所有这些,
declare @startdate datetime = '2012-01-01'
declare @enddate datetimg = '2012-01-31'
(SQL Server 2008 +)