我在表中有datecreated
字段。它包含值“2009-12-30 11:47:20:297” 我有这样的查询:要从日期时间在sql中获取日期
select *
from table
where DateCreated = getdate()
虽然今天的日期存在一个行,我没有同时执行上面得到该行查询。任何人都可以帮忙吗?
我在表中有datecreated
字段。它包含值“2009-12-30 11:47:20:297” 我有这样的查询:要从日期时间在sql中获取日期
select *
from table
where DateCreated = getdate()
虽然今天的日期存在一个行,我没有同时执行上面得到该行查询。任何人都可以帮忙吗?
您的查询不返回您期望的行的原因是因为GETDATE()返回执行查询时的日期和时间部分。 DateCreated
列中的值与时间部分不匹配,因此不会返回任何行。
构建查询的方法有很多,以便根据日期组件评估日期。下面是一个例子:
WHERE YEAR(datecreated) = YEAR(GETDATE())
AND MONTH(datecreated) = MONTH(GETDATE())
AND DAY(datecreated) = DAY(GETDATE())
不幸的事实是,使用在柱的功能的任何查询意味着,如果在列上存在的指标,它不能被使用。
但您可以将YEAR(),MONTH(),DAY()转换为表格中的持久计算列,然后将这些列索引...... – 2009-12-30 08:13:01
@marc_s:这听起来像某个滥用人造钥匙的人会想出来。 (抱歉,我无法抗拒;))......尽管如此,请看Peter Di Cecco的答案 - 这是最好的答案,为使用索引提供了机会。 – 2009-12-30 09:00:26
@克雷格:好的,取决于 - 如果你需要例如选择月份很多次(对于月度报告等),这可能是一个有效的方法 – 2009-12-30 09:34:07
您可以使用类似这样的SQL Server
CREATE FUNCTION [dbo].[udf_DateOnly](@DateTime DATETIME)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(dd,0, DATEDIFF(dd,0,@DateTime))
END
此行
DATEADD(dd,0, DATEDIFF(dd,0,@DateTime))
将剥离出日期部分。
您可以通过使用
CONVERT(varchar(8), GETDATE(), 112)
如果需要的话,可以再改回日期时间,因此你会得到一个日期与时间日期时间转换为字符串,只有日期,分,秒和毫秒设置为零。
虽然这个工作,我不会推荐它。首先,内部完成的字符串操作会降低性能。但更重要的是,它会导致开发人员遇到一些不良和潜在危险的习惯。 – 2010-01-11 08:28:51
绝对值得一提。你还可以告诉我使用这种方法的潜在危险是什么? – Carlos 2010-01-11 09:10:50
datetime字段包含日期和时间,精确到毫秒。您的查询只有在数据库中存储的精确毫秒时才有效。
要检查,如果它是今天,但忽略了一天的时间,你可以检查这样一个范围:
select * from table where
DateCreated >= '2009-12-30' and
DateCreated < '2009-12-31'
您可以使用结合与转换的当前日期的功能,如旁观者或Khilon已发布。这是一个使用了旁观者的答案的完整例子。另外,正如克雷格杨指出的那样,这将与索引一起工作。
select * from table where
DateCreated >= DATEDIFF(dd,0,GETDATE()) and
DateCreated < DATEDIFF(dd,0,GETDATE())
+1:只是强调一下,范围必须包含在一边而不包含在另一边。即> =和<完全如图所示。顺便说一句,要迂腐,日期时间只有17毫秒左右。 – 2009-12-30 09:06:52
PS:我更喜欢旁观者的机制,从'GETDATE()'结果中删除时间。即'DateCreated> = DATEDIFF(dd,0,GETDATE())和DateCreated
最简单的解决方案可能是:
SELECT CAST(GETDATE() as DATE)
是的,如果您正在使用SQL Server 2008或更新的DATE数据类型,那么。 – 2011-04-12 14:53:26
彼得·迪切科的答案是最好的之一,它允许使用索引。 – 2009-12-30 08:39:44
您可以标记您正在使用的SQL Server版本,因为SQL 2008具有可投射到的DATE类型。谢谢 – 2011-12-06 00:19:12