SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', '2012-01-02 01:23:45')
鑑於這個例子,它應該仍然是1
,因爲只有一天過去了。即使你正在考慮一天的開始,它仍然只有一個(因爲這個範圍包括開始僅2012-01-02 00:00:00
)。
你的邏輯:
SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', '2012-01-02 01:23:45')
和
SELECT DATEDIFF(DAY, '2012-01-01 00:00:00', '2012-01-02 00:00:00')
應該是相同的,因爲數學上它們是相同的範圍內。 DATEDIFF
根據第一個參數的粒度進行比較。您正在比較day
,因此SQL Server將看到2012-01-01
到2012-01-02
作爲1
天差異。
一個極其醜陋的(在我看來,壞)解決方法是這樣的:
SELECT DATEDIFF(day, yourStartDate, dateadd(ss, -1, yourEndDate)) + 1
這是什麼會做的是處理包括日期。所以,你基本上可以有這樣的:
SELECT DATEDIFF(DAY, '2012-01-01 01:23:45', dateadd(ss, -1, '2012-01-02 01:23:45')) + 1
將等於2
這:
SELECT DATEDIFF(DAY, '2012-01-01 00:00:00', dateadd(ss, -1, '2012-01-02 00:00:00')) + 1
就等於1
。我不認爲這是世界上最好的想法,但它會給你你想要的結果。這一切都歸結爲業務邏輯。
林不知道我明白你爲什麼認爲第二個查詢不應該返回'1'。您需要明確時間元素對結果的影響方式。 – Thomas
@Thomas - 我想你誤解了我。第二個查詢確實並且應該返回'1'。第一個查詢返回'1',但我希望它返回'2'。 –
爲什麼第一個應該返回2?這種情況怎麼樣:'DATEDIFF(DAY,'2012-01-01 00:00:00','2012-01-02 00:00:01')'。是否需要兩個日期時間值之間的24小時時間段數? – Thomas