在sqlserver中,如何比较日期? 例如:
从注册日期> ='1/20/2009'的用户中选择*
(RegistrationDate是日期时间类型)
由于
答案 0 :(得分:11)
如果你放入
SELECT * FROM Users WHERE RegistrationDate >= '1/20/2009'
它会自动将字符串'1/20/2009'
转换为DateTime
格式,日期为1/20/2009 00:00:00
。因此,通过使用>=
,您应该获得注册日期为1/20/2009或更近的每个用户。
编辑:我把它放在评论部分,但我也应该把它链接到这里。这篇文章详细介绍了在查询中使用DateTime的更深入方式:http://www.databasejournal.com/features/mssql/article.php/2209321/Working-with-SQL-Server-DateTime-Variables-Part-Three---Searching-for-Particular-Date-Values-and-Ranges.htm
答案 1 :(得分:2)
select sysdate from dual
30-MAR-17
select count(1) from masterdata where to_date(inactive_from_date,'DD-MON-YY'
between '01-JAN-16' to '31-DEC-16'
12998 rows
答案 2 :(得分:1)
Select * from Users where RegistrationDate >= CONVERT(datetime, '01/20/2009', 103)
可以安全使用,与服务器上的日期设置无关。
可以找到完整的样式列表here。
答案 3 :(得分:0)
我总是将过滤日期变为日期时间,没有时间(时间= 00:00:00.000)
DECLARE @FilterDate datetime --final destination, will not have any time on it
DECLARE @GivenDateD datetime --if you're given a datetime
DECLARE @GivenDateS char(23) --if you're given a string, it can be any valid date format, not just the yyyy/mm/dd hh:mm:ss.mmm that I'm using
SET @GivenDateD='2009/03/30 13:42:50.123'
SET @GivenDateS='2009/03/30 13:42:50.123'
--remove the time and assign it to the datetime
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateD), 0)
--OR
@FilterDate=dateadd(dd, datediff(dd, 0, @FilterDateS), 0)
您可以使用此WHERE子句进行过滤:
WHERE ColumnDateTime>=@FilterDate AND ColumnDateTime<@FilterDate+1
这将提供2009/03/30日开始或之后的所有比赛,直至并包括2009/03/30的完整日期
您也可以对START和END过滤器参数执行相同的操作。始终将开始日期设为日期时间,并在所需日期使用零时间,并使条件为“&gt; =”。始终将结束日期设置为您想要的第二天的零时间并使用“&lt;”。这样做,无论日期的时间部分如何,您都将始终正确地包含任何日期。
答案 4 :(得分:0)
另一个功能是::
Select * from table where date between '2009/01/30' and '2009/03/30'
答案 5 :(得分:0)
如果您不想被日期格式打扰,可以将该列与常规日期格式进行比较,例如
select *
From table
where cast (RegistrationDate as date) between '20161201' and '20161220'
确保日期为DATE格式,否则为cast (col as DATE)