[英]Comparison of datetime in sql server
我将日期时间存储为数据库的标准日期时间,如2011-10-19 17:18:44.083。 如果datetime字段等于今天之后的5天,则需要选择所有行。 但是我不希望仅仅一天就足够这种比较。
SELECT * FROM dbo.TestBox
where TargetDate = dateadd(day,5, getdate())
这是行不通的,我不知道为什么,但可能不知道为什么。
提前致谢,
如果您使用的是2008+,则可以将两者都转换为日期:
where convert(date, targetdate) = convert(date, dateadd(day, 5, getdate()))
如果您使用的是2005或更早版本,请执行以下操作:
where convert(varchar, targetdate, 101) = convert(varchar, dateadd(day, 5, getdate()), 101)
你可以做:
SELECT * FROM dbo.TestBox
where CONVERT(VARCHAR(8),TargetDate,112) = CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112)
或者,如果您在TargetDate上有一个索引:
SELECT * FROM dbo.TestBox
where TargetDate >= CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112)
AND TargetDate < CONVERT(VARCHAR(8),dateadd(day,6, getdate()),112)
尝试:
select *
from dbo.TestBox
where datediff(dd, getdate(), TargetDate) = 5
样例代码:
declare @targetDate as DateTime
set @targetDate = '2011-11-2'
select datediff(dd, getdate(), @targetDate)
输出:
五
DATEDIFF
进行救援!
DECLARE @monday DATETIME;
DECLARE @fridayAM DATETIME;
DECLARE @fridayPM DATETIME;
SET @monday = '2011-10-23 10:50:00';
SET @fridayAM = '2011-10-28 08:00:00';
SET @fridayPM = '2011-10-28 17:30:00';
SELECT DATEDIFF(DAY, @monday, @fridayAm) AS AmDiff,
DATEDIFF(DAY, @monday, @fridayPm) AS PmDiff
AmDiff和PmDiff均为5。
以下查询应执行所需的操作。
SELECT * FROM dbo.TestBox
WHERE TargetDate
BETWEEN DATEADD(DAY, 5, DATEADD(MILLISECOND, 1, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)))
AND DATEADD(DAY, 5, DATEADD(MILLISECOND, -2, DATEADD(DAY, datediff(day, 0, GETDATE()) + 1, 0))) -- between the start and end of the date in 5 days
该问题可能是由于日期格式不同所致。
该链接在sql http://databases.aspfaq.com/database/what-are-the-valid-styles-for-converting-datetime-to-string.html中具有所有日期格式选项。
尝试类似的东西:
SELECT * FROM dbo.TestBox where CONVERT(CHAR(8), TargetDate , 1)= dateadd(day,5, (CHAR(8), getdate(), 1))
这会将您要比较的两个日期都转换为相同的格式,并放宽了时间部分
除了使用GETDATE(),您还可以使用CURRENT_TIMESTAMP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.