2016-04-22 29 views
1

我需要檢查存儲在SQL表中的格式是否爲YYYY-MM-DD。檢查格式是否爲YYYY-MM-DD

+2

Tag dbms used! (當涉及到日期/時間時,太多的產品遠遠不符合ANSI SQL標準。) – jarlh

+4

但是,您爲什麼需要這樣做?總是使用'日期'數據類型的日期... – jarlh

+0

我正在分析一個已經存在的數據集。我試過了:像'%YYYY-MM-DD%''但是確定它是否正確。 –

回答

1

嘗試這種方式

SELECT CASE WHEN ISDATE(@string) = 1 
    AND @string LIKE '[1-2][0-9][0-9][0-9]/[0-1][0-9]/[0-3][0-9]' 
    THEN 1 ELSE 0 END; 

@string是日期。

3

你不存儲特定的格式(我認爲MS SQL存儲爲兩個整數),你選擇你的格式輸出。當我說你選擇時,我的意思是你有你的默認值(大多數是在安裝MS SQL時自動設置,或者基於你的國家,時區等使用的任何設置 - 你可以改變這一點)以及你在執行腳本時選擇的默認值。

+1

MS-SQL Server將日期存儲爲浮點數。試試這個:SELECT CAST({d'1900-01-01'} AS FLOAT)作爲FirstPossible,CAST(GETDATE()作爲FLOAT)作爲CurrentDate'。整數部分是自1900-01-01以來的天數,而逗號後面的部分是當天的時間。這就是爲什麼增加時間會導致1900年1月某個地方有趣的日期的原因:-) – Shnugo

0

你可以設置格式,但據我所知不能檢查格式。

2

首要的是:如果日期值存儲在datedatetime或等效的時態數據類型列中,那麼在數據庫級別中不會有日期格式。日期本身已通過在特定數據庫引擎的給定數據類型中定義的規則進行驗證,並以其定義的任何二進制格式進行存儲。

如果數據是一個字符串(從文件或例如VARCHAR列),那麼你可以,如果它是在使用TO_DATE()TRY_CONVERT()功能在MySQL的SQL Server和STR_TO_DATE()的新版本給定的格式驗證,或者你可以使用第三方/自己寫的模塊/ clrs來做到這一點。

這些驗證只會檢查字符串是否符合給定的格式,而日期部分是否在可接受的日期範圍內,但不會測試值的含義。將02/03/2005字符串轉換爲日期也適用於MM/DD/YYYYDD/MM/YYYY格式,除非我們有關於最初存儲它的環境的信息,否則無法確定哪一個是真正的值。

永遠不要將時態數據存儲在基於字符的列(如varchar)中,使用符合您需要的數據類型(DATE/DATETIME/TIMESTAMP/whatever)。

+0

@完全同意一個小*但*:如果您使用獨立於文化的格式,如ODBC或ISO8601,則可以存儲此字符。否則,其中沒有類型安全的XML可能:-) – Shnugo

+0

部分同意以下評論:如果您以字符格式存儲它,請保持格式一致並以可靠的格式存儲包括時區在內的所有部分(如@Shnugo提及的那些部分),並且只有當存儲引擎不支持臨時存儲類型時(如已經提到的XML)。在答案中,我正在談論數據庫,因此最後的評論意味着關於數據庫而不是其他存儲格式。 – Pred