在sql 2005中,而不是从dateparts年,月和日建立一个查询,
有没有更简洁的方式编写where子句?
在SQL Server 2008上,您将拥有一个新的DATE
数据类型,您可以使用它来实现此目的:
SELECT (list of fields) FROM dbo.YourTable WHERE dateValue BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
将CAST(GETDATE() AS DATE)
当前日期和时间转换为仅日期值,例如,返回2010年4月6日的"2010-04-06".为此添加一天基本上选择今天的所有日期时间值.
在SQL Server 2005中,没有简单的方法可以做到这一点 - 我在这里找到的最优雅的解决方案是使用DATETIME的数字操作来实现相同的结果:
SELECT (list of fields) FROM dbo.YourTable WHERE dateValue BETWEEN CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME) AND DATEADD(DAY, 1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
在SQL 2000和SQL 2005中,您可以使用一个很好的select语句从DateTime中删除时间组件,即
SELECT DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
将于2010年4月6日返回(仅适用于今天).
所以结合marc_s的答案,你想要的
SELECT (list of fields) FROM dbo.YourTable WHERE dateValue BETWEEN DATEADD(dd, DATEDIFF(dd,0,'MY Date and Time, But I Only Want Date'), 0) AND DATEADD(dd, DATEDIFF(dd,0,'MY Date and Time, But I Only Want Date'), 1)
编辑:更改为满足要求,请注意第二个DateAdd中的1(这将从开头的日期添加到1(而不是0),使其成为2010年4月7日00:00:00)如果您想要4月23日:59:59你距第二次约会还有一秒钟
DATEADD(ss,-1,'My DateTime')
最后的召唤将成为
DATEADD(ss,-1,DATEADD(dd, DATEDIFF(dd,0,'MY Date and Time, But I Only Want Date'), 1))
好的,这很多信息一下子!希望这一切都有道理:)