获取datetime列=今天的行 - SQL server noob

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)

好的,这很多信息一下子!希望这一切都有道理:)


Joa*_*man 5

性能不佳,但有解决方案:

SELECT * 
FROM tblDate
WHERE CONVERT(VARCHAR, date, 112) = CONVERT(VARCHAR, GETDATE(), 112);
Run Code Online (Sandbox Code Playgroud)

如果是普通查询,则应添加仅包含年月日内容的计算列。