2013-08-28 27 views
-2

我與日期有問題。問題是,即使格式不同,ISDATE也會給我有效的日期。但是,我想要做的是INSERT NULL是任何未格式化的日期字段:8/28/2013或08/28/2013如何檢查特定的日期格式?

這是供國際使用。僅適用於美國。這意味着:2013年8月8日將意味着2011年8月8日。並將於2011年8月8日施展。

我不知道如何檢查格式。當我可以做整個案例時。

我試圖玩弄這樣的:目前在列

DECLARE @d DATETIME = '10/01/2011'; 
SELECT CASE WHEN @d != FORMAT (@d, 'yyyy/MM/dd', 'en-US') THEN @d ELSE NULL END 

的日期格式,像這樣。 8/28/2013或08/28/2013 如果格式正確,我會進行轉換。

謝謝!

+4

我假設列_is not_一個'date' /'datetime'列?否則這個問題將是沒有意義的,因爲格式實際上並沒有保留,只是它背後的信息。 (或者你正在研究如何將SQL默認格式轉換爲字符串/顯示時的列格式) –

+0

這是一個日期,但APP驗證是不存在的,所以日期輸入如下:0808/21/20133,想想更糟糕的條目。我正在清理一些歷史數據。 – Asynchronous

+2

您如何確定08/09/2013是否正確?是2013年9月8日還是2013年8月9日? –

回答

1

它看起來就像你正在做一項datetime列,它有意強制轉換爲字符串(因此格式化),然後找實例哪裏會堅持這一格式。

事實是,格式只有在使它成立。 SQL不會將其存儲爲「2013年1月1日」或「2013年1月1日」 - 它只會使用默認演員表或提供的格式進行顯示。

所以,問題是沒有實際意義。您不會在數據中發現異常情況,只是您沒有獲得所需格式的情況。

在問候消毒,當SQL進入INSERT/UPDATE(和格式的壞[你提到0808/21/20133]),你會得到這樣的:從轉換日期和/或時間時

轉換失敗字符串。

+0

我不遵循您的觀點:我正在使用CSV和文本文件中的歷史數據。長話短說,由於這些格式,轉換失敗。認爲解釋非常簡單。 – Asynchronous

+0

那麼如何通過CSV解析等同於在SQL中的'datetime'列上執行維護? (也許我是一個困惑?) –

-1

您可以存儲日期爲varchar,然後用下面的查詢格式爲:

DECLARE @d varchar(10) 
set @d= '08/28/2013'; 
SELECT CASE WHEN @d LIKE '[0-1][0-9]/[0-3][0-9]/[1-2][0-9][0-9][0-9]' THEN @d ELSE NULL END 
+0

上述不起作用,如果我這樣做,它會拋出一個轉換錯誤:08/28/20133,我需要簡單地得到一個NULL而不是錯誤。無論如何感謝您的幫助和時間。 – Asynchronous

+0

我認爲擴大變量大小可以解決問題。 – Sonam

+0

我認爲存儲日期作爲varchar是一個可怕的想法。 –