Chi*_*hin 37 sql-server sql-server-2005
在sql 2005中,而不是从dateparts年,月和日建立一个查询,
有没有更简洁的方式编写where子句?
mar*_*c_s 29
在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))
Run Code Online (Sandbox Code Playgroud)
将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))
Run Code Online (Sandbox Code Playgroud)
Pos*_*Man 24
在SQL 2000和SQL 2005中,您可以使用一个很好的select语句从DateTime中删除时间组件,即
SELECT DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
将于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)
Run Code Online (Sandbox Code Playgroud)
编辑:更改为满足要求,请注意第二个DateAdd中的1(这将从开头的日期添加到1(而不是0),使其成为2010年4月7日00:00:00)如果您想要4月23日:59:59你距第二次约会还有一秒钟
DATEADD(ss,-1,'My DateTime')
Run Code Online (Sandbox Code Playgroud)
最后的召唤将成为
DATEADD(ss,-1,DATEADD(dd, DATEDIFF(dd,0,'MY Date and Time, But I Only Want Date'), 1))
Run Code Online (Sandbox Code Playgroud)
好的,这很多信息一下子!希望这一切都有道理:)
性能不佳,但有解决方案:
SELECT *
FROM tblDate
WHERE CONVERT(VARCHAR, date, 112) = CONVERT(VARCHAR, GETDATE(), 112);
Run Code Online (Sandbox Code Playgroud)
如果是普通查询,则应添加仅包含年月日内容的计算列。