如何在SQL Server中仅使用date查询DATETIME字段?
简单的问题,但我无法设法解决它呢…
我有一个testing与DATETIME字段,如下所示:
ID NAME DATE 1 TESTING 2014-03-19 20:05:20.000
我需要的是下面的查询返回这个行和每一行的date= 03/19/2014,无论什么时候是:
select * from test where date = '03/19/2014';
但是它不返回行。 唯一的办法就是指定时间:
select * from test where date = '03/19/2014 20:03:02.000';
提前致谢 !
使用范围或DateDiff函数
select * from test where date between '03/19/2014' and '03/19/2014 23:59:59'
要么
select * from test where datediff(day, date, '03/19/2014') = 0
其他选项是:
-
如果您可以控制数据库架构,并且不需要时间数据,那么就把它拿出来。
-
或者,如果你必须保留它,添加一个计算列属性,其中的date值的时间部分被剥离…
Alter table Test Add DateOnly As DateAdd(day, datediff(day, 0, date), 0)
或者,在更新版本的SQL Server中
Alter table Test Add DateOnly As Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)
那么,你可以简单地写下你的查询:
select * from test where DateOnly = '03/19/2014'
简单的答案;
select * from test where cast ([date] as date) = '03/19/2014';
我正在使用MySQL 5.6,并且有一个DATE函数从date时间只提取date部分。 所以问题的简单解决scheme是 –
select * from test where DATE(date) = '2014-03-19';
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
尝试这个
select * from test where Convert(varchar, date,111)= '03/19/2014'
你可以试试这个
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
select * from test where date between '03/19/2014' and '03/19/2014 23:59:59'
这是一个真正的不好的答案。 有两个原因。
1. 23.59.59.700等时间会发生什么情况,次数多于23:59:59。
2.行为取决于数据types。 对于datetime / date / datetime2types,查询的行为不同。
使用23:59:59.999进行testing更加糟糕,因为根据datetypes的不同,您会得到不同的取整。
select convert (varchar(40),convert(date , '2014-03-19 23:59:59.999')) select convert (varchar(40),convert(datetime , '2014-03-19 23:59:59.999')) select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))
– date值被“切碎”。 – 对于date时间,该值向上舍入到下一个date。 (最近值)。 – 对于datetime2,值是精确的。
你可以使用这个截断时间部分的方法:
select * from test where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
date和语言有一个问题,避免它的方式是要求这种格式的dateYYYYMMDD。
根据下面的链接,下面的这种方式应该是最快的。 我检查了SQL Server 2012,我同意这个链接。
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
问候。
testing这个查询。
SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key' ORDER BY is_date DESC, is_time DESC
只需在你的WHERE
子句中使用这个。
下面的“SubmitDate”部分是列名,所以插入你自己的。
这将只返回结果的“年份”部分,省略分钟等。
Where datepart(year, SubmitDate) = '2017'
select * from invoice where TRANS_DATE_D>= to_date ('20170831115959','YYYYMMDDHH24MISS') and TRANS_DATE_D<= to_date ('20171031115959','YYYYMMDDHH24MISS');
-- Reverse the date format -- this false: select * from test where date = '28/10/2015' -- this true: select * from test where date = '2015/10/28'