2012-12-11 91 views
4

例如(不是這樣工作):如何創建用於查詢的硬編碼日期參數?

SELECT * FROM User 
WHERE LastActivity > Date(1980,1,1) 

凡日期應該使用參數的年,月,日的整數。爲了避免語言環境的麻煩,我明確不想使用「yyyy/mm/dd」或類似的字符串。

我正在使用MSSQL數據庫上的Microsoft SQL Server Management Studio,如果這很重要。

注意:我確信這是微不足道的,但我找不到使用谷歌或SO的解決方案。

+1

您可以使用Unixtimestamp嗎? – ATaylor

+0

是....................... – Marcel

+0

儘管我不知道您使用哪種編程/腳本語言來進行查詢,但我很漂亮確保它具有將標準日期轉換爲unix時間戳的一些功能。或者簡單地硬編碼時間戳本身。 – ATaylor

回答

6

爲了避免語言環境的麻煩,我明確不想使用像「yyyy/mm/dd」或類似的 字符串。

爲了避免這種情況,最好的方法是將日期作爲與語言無關的日期,如YYYYMMDD。這樣,這將是獨立的語言:

SELECT * FROM User 
WHERE LastActivity > '19800101'; 
+0

這工作,謝謝! – Marcel

+1

@Marcel - 隨時歡迎您。 –

2

使用ISO date format這是yyyymmdd

SELECT * FROM User 
WHERE LastActivity > CONVERT(DATE, (CONVERT(VARCHAR(4), @Year) + 
            RIGHT('0' + CONVERT(VARCHAR(2), @Month),2) + 
            RIGHT('0' + CONVERT(VARCHAR(2), @Date),2))) 
+0

'@ months'和'@ date'應該填充前導零以便正確轉換,一種方法是使用RIGHT(REPLICATE('0',2)+ CAST(@MONTH AS VARCHAR(2)) ,2)''而不是'CONVERT(VARCHAR(2),@Month)'與'@ date'相同。 –

+0

@MahmoudGamal已經完成。 – Kaf

0

我一直髮現,大多數數據庫將接受「日 - 月 - 年」作爲一個日期參數,我用它幾乎無處不在。有些人沒有(例如MS/Access),但是SQL/Server有。這種格式已被廣泛接受,但顯然你可能需要使其具體語言。

SELECT * FROM User WHERE LastActivity > '11-Dec-2012'; 
+0

當它包含月份名稱的*英文*縮寫時,它如何獨立於語言環境?試試這個:'set language spanish;選擇投射('11-Dec-2012'作爲日期時間);'。正如我上面評論的那樣,文檔說ISO 8601格式是明確的;其他格式可能會有不同的解釋。 [如果你使用'SET DATEFORMAT',則ISO 8601甚至可以正確解釋。](http://msdn.microsoft.com/zh-cn/library/ms189491。aspx) – Pondlife

+0

你當然很對。 –

0

我認爲'轉換'功能可以滿足您的需求。爲了使1980年3月20日,執行以下操作:

Convert(date, '1980-03-20') 

你準確的查詢將是:

SELECT * FROM User 
WHERE LastActivity > Convert(date, '1980-01-01') 

如果您正在使用SQL Server 2012,你可以使用簡單的DATEFROMPARTS功能:

SELECT * FROM User 
WHERE LastActivity > DATEFROMPARTS(1980,01,01) 
相關問題