2016-11-24 79 views
2

下午,個月從日期返回不正確的值

我有一個SQL服務器的問題,我可以做一些幫助。 當我在錯誤的日期範圍內返回行的日期範圍中運行select語句時。

例如如果我執行以下

select * from theTable where startDate between '2016-09-01 00:00:00' and '2016-09-08 23:59:59' 

我希望排在startDate是1日和9月8日之間,有什麼我卻越來越是1月9日和8月9日之間的startDate行。

我檢查我有使用DATEBASE設置的語言:

select * from sys.syslanguages order by name where name = @@language 

這將返回英國

DBCC USEROPTIONS回報

textsize    2147483647 
language    British 
dateformat   dmy 
datefirst   1 
lock_timeout   -1 
quoted_identifier SET 
arithabort   SET 
ansi_null_dflt_on SET 
ansi_warnings  SET 
ansi_padding   SET 
ansi_nulls   SET 
concat_null_yields_null SET 
isolation level   read committed 

我已經檢查了默認語言登錄,這也是英國人。

當我執行print month('2016-09-01 00:00:00')

它返回1,而不是9.除非是我弄錯了日期和時間上面應該是ODBC規範yyyy-mm-dd hh:mi:ss(24h)

爲什麼打印1而不是9,更重要的是我該如何解決?

印刷@@version返回

Microsoft SQL Server 2005 - 9.00.5057.00 (X64) 
    Mar 25 2011 13:33:31 
    Copyright (c) 1988-2005 Microsoft Corporation 
    Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 

謝謝您的幫助。 如果這個問題已經得到解答,你可以指點一下,但我找不到答案。

+2

使用明確的格式('YYYYMMDD'):'where startDate> ='20160901'and startDate <'20160909'' – Lamak

回答

2

您似乎有一個相對不尋常的國際化設置,其中默認值是YDM而不是YMD。

您可以隨時使用日期沒有連字符:

select * 
from theTable 
where startDate >= '20160901' and 
     startDate < '20160909'; 

這些總是在SQL Server解釋爲YYYYMMDD。

+0

確實。以法語爲例,選擇2016年1月9日的「2016-09-01 00:00:00」。 –

-1

如果您想時間戳還要在評估被認爲是你的WHERE條件,嘗試轉換日期爲:

CONVERT(datetime,'2016-09-01 00:00:00',101) 

,所以你的查詢會變成:

select * from theTable 
where startDate between 
CONVERT(datetime,'2016-09-01 00:00:00',101) 
and 
CONVERT(datetime,'2016-09-08 23:59:59',101) 

你一個月這樣將[9]而不是[1],並且時間戳也將被考慮。

相關問題