我想從表Log
中選擇所有記錄,其中DateAndTime
字段值(類型爲datetime
)是今天之前的一天,無論它在哪一天。TSQL SELECT上一次日期的記錄
因此,如果今天是2011-06-08,我想選擇DateAndTime
大於或等於2011-06-07 00:00:00
且小於2011-06-08 00:00:00
的所有行。
我猜這裏的潛在缺陷是它的行爲在一個月的第一天,因爲明顯像2011-06-00
這樣的日期是無效的,應該是2011-05-31
。
我想從表Log
中選擇所有記錄,其中DateAndTime
字段值(類型爲datetime
)是今天之前的一天,無論它在哪一天。TSQL SELECT上一次日期的記錄
因此,如果今天是2011-06-08,我想選擇DateAndTime
大於或等於2011-06-07 00:00:00
且小於2011-06-08 00:00:00
的所有行。
我猜這裏的潛在缺陷是它的行爲在一個月的第一天,因爲明顯像2011-06-00
這樣的日期是無效的,應該是2011-05-31
。
對於SQL Server 2008,你可以用這個。
select *
from [log]
where cast(DateAndTime as date) = cast(getdate()-1 as date)
前2008年,你可以使用這個
select *
from [log]
where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and
DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0)
SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
這個例子假設SQL服務器:
select *
from log
where convert(varchar(8), DateAndTime , 112) = convert(varchar(8), getdate()-1, 112)
從本質上講,轉換日期爲yyyymmdd(在112
參數),然後檢查它等於昨天的日期(getdate()-1
),也轉換爲爲yyyymmdd。
假設的SQL Server
declare @today date
set @today = GETDATE()
select * from Log where DateAndTime between DATEADD(dd, -1, @today) and @today
它應該包括條件運算和之間不。否則它包括今天的記錄。
Declare @today date
Set @today = GETDATE()
Select YourcolumnNames from log
Where DateAndTime >= DATEADD(dd, -1, @today) and DateAndTime < DATEADD(dd, -1, @today)
此外,您應該在select語句中提及列名和*應該避免。這可以提高性能
投射色譜柱可能會產生嚴重的性能影響,請參閱JanW的解決方案 – 2014-09-23 07:23:01
@AdriaanDavel是的,它可以用基數估計。不具有可控性。您是否從我的答案中閱讀了關於DBA的問題? – 2014-09-23 07:30:58