获取不同年份的2个日期之间的确定日期
问题描述:
Declare @FromDate as datetime,
@ToDate as datetime
set @FromDate = '2000-01-01',
@ToDate = '2001-01-01'
Select *
from Mytable
Where
Convert(varchar,ses_begin_date,101) >= Convert(varchar,@FromDate, 101)
AND Convert(varchar,ses_begin_date, 101) <= Convert(varchar,@ToDate,101)
尽管里面已经有数据,但它不返回任何数据。获取不同年份的2个日期之间的确定日期
答
您不需要转换。只要使用这个
Declare @FromDate as datetime,
@ToDate as datetime
set @FromDate = '2000-01-01',
@ToDate = '2001-01-01'
Select *
from Mytable
Where
ses_begin_date>= @FromDate
AND ses_begin_date<= @ToDate
此外,如果你的目标是让所有的数据,2000年,使用
Declare @FromDate as datetime,
@ToDate as datetime
set @FromDate = '2000-01-01',
@ToDate = '2001-01-01'
Select *
from Mytable
Where
ses_begin_date>= @FromDate
AND ses_begin_date< @ToDate
答
Select *
from Mytable
Where
ses_begin_date>='2000-01-01'
AND ses_begin_date<= '2001-01-01'
答
使用DateDiff函数
Select *
From Table
Where Datediff(day,@datefrom, ses_begin_date)<=0
and Datediff(day,ses_begin_date,@dateto)<=0
+0
虽然这可能是正确的,但我不会建议您使用此功能,因为这可以使您的查询变得不可靠。 –
+0
是为此目的在关键字之间使用 –
答
如果您正在使用比2005年更高的SQL Server。 2008或以上的查询将会产生日期范围内的所有记录。
您没有获取记录,因为您使用的是“日期时间”,其中也包含可能不会产生所有必需记录的时间部分。但是,如果范围仅包含日期部分,则应在比较时将其转换为“日期时间”或“日期”类型。
这应该工作。
DECLARE
@FromDate DATE ,
@ToDate DATE;
SELECT @FromDate = '2000-01-01',
@ToDate = '2001-01-01'
要么
SELECT
*
FROM
@temp
WHERE
(CONVERT(DATE, ses_begin_date) >= @FromDate
AND CONVERT(DATE, ses_begin_date) <= @ToDate)
或者
SELECT
*
FROM
@temp
WHERE
(CONVERT(DATE, ses_begin_date) BETWEEN @FromDate AND @ToDate).
如果您使用的版本低于比2008年多一条路可将其转换为“int”删除日期部分比作比较。即。
DECLARE
@FromDate int ,
@ToDate int;
SELECT @FromDate = CONVERT(INT, CONVERT(VARCHAR(10),'2000-01-01',112)),
@ToDate = CONVERT(INT, CONVERT(VARCHAR(10),'2001-01-01',112))
--Either
SELECT
*
FROM
@temp
WHERE
(CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) >= @FromDate
AND CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) <= @ToDate)
--Or
SELECT
*
FROM
@temp
WHERE
(CONVERT(INT, CONVERT(VARCHAR(10), ses_begin_date, 112)) BETWEEN @FromDate AND @ToDate)
为什么你处理日期为varchar? –
尤其不好,使用格式101生成的字符串不会像日期那样排序,并且在这里生成两个字符串,其中没有其他可能的日期值出现在它们之间。 –