【发布时间】:2010-12-02 23:07:08
【问题描述】:
我正在寻找一个好的 SQL 语句来从一个表中选择前一天的所有行。该表包含一个日期时间列。我使用的是 SQL Server 2005。
【问题讨论】:
标签: sql sql-server sql-server-2005
我正在寻找一个好的 SQL 语句来从一个表中选择前一天的所有行。该表包含一个日期时间列。我使用的是 SQL Server 2005。
【问题讨论】:
标签: sql sql-server sql-server-2005
目前无法测试,但是:
select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
【讨论】:
在 SQL 中获取“今天”值:
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())
【讨论】:
今天没有时间:
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)
【讨论】:
SELECT * 将返回带有原始时间的任何日期。
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0) 时,我得到:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
这是一个非常古老的线程,但这是我的看法。 而不是 2 个不同的子句,一个大于和小于。我使用以下语法从 A 日期中选择记录。如果你想要一个日期范围,那么以前的答案就是要走的路。
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
在上述情况下,昨天的记录 X 将为 -1
【讨论】:
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
【讨论】:
另一种方式告诉它“昨天”...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
可以想象,这在 1 月 1 日以及每个月的第一天都无法正常工作。但在飞行中它是有效的。
【讨论】:
似乎缺少明显的答案。要从表 (Ttable) 中获取所有数据,其中列 (DatetimeColumn) 是带有时间戳的日期时间,可以使用以下查询:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
这可以很容易地更改为今天、上个月、去年等。
【讨论】:
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 相比要贵得多,因为它必须评估每一行的 DATEDIFF()
应该这样做:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
【讨论】:
在 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)
【讨论】:
嗯,将日期时间列转换为日期比比较更容易。
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
【讨论】:
subdate(now(),1) 将返回昨天的时间戳 下面的代码将选择具有昨天时间戳的所有行
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
【讨论】:
一个简单的选择
Select GETDATE() - 1
更改 1 以返回那么多天数
PS:这为您提供时间戳准确性。
【讨论】: