我正在寻找一个好的SQL语句来从一个表中选择前一天的所有行。该表包含一个日期时间列。我正在使用SQL Server 2005。
答案 0 :(得分:182)
今天没时间:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
得到黄昏时间:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
仅查询昨天的所有行:
select
*
from yourTable
WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
答案 1 :(得分:36)
要在SQL中获取“today”值:
convert(date, GETDATE())
获得“昨天”:
DATEADD(day, -1, convert(date, GETDATE()))
要获得“今天减去X天”:将-1更改为-X。
因此对于所有昨天的行,你得到:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
答案 2 :(得分:16)
似乎没有明显的答案。要从表(Ttable)获取所有数据,其中列(DatetimeColumn)是带有时间戳的日期时间,可以使用以下查询:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
这很容易改为今天,上个月,去年等等。
答案 3 :(得分:8)
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
答案 4 :(得分:5)
这是一个非常古老的主题,但这是我的看法。 而不是两个不同的条款,一个大于和小于。我使用以下语法从A日期中选择记录。如果你想要一个日期范围,那么以前的答案是可行的。
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
在上述情况下,对于昨天的记录,X将为-1
答案 5 :(得分:4)
现在无法测试,但是:
select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
答案 6 :(得分:3)
这应该这样做:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
答案 7 :(得分:2)
在SQL Server中这样做:
where cast(columnName as date) = cast(getdate() -1 as date)
您应该将表达式的两面都投射到日期,以避免时间格式化问题。
如果您需要更详细地控制间隔,那么您应该尝试类似:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
答案 8 :(得分:1)
另一种方式告诉它“昨天”...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
这可能在1月1日以及每个月的第一天都不会有效。但在飞行中它是有效的。
答案 9 :(得分:1)
嗯,更容易将datetime列转换为日期而不是比较。
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
答案 10 :(得分:0)
subdate(now(),1)将返回昨天的时间戳 下面的代码将选择带有昨天时间戳记的所有行
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
答案 11 :(得分:0)
一个简单的替代方案
Select GETDATE() - 1
改1回去那么多天
PS:这为您提供时间戳准确性。