2016-02-04 45 views
1

我想知道是否有一種方法可以在一般意義上檢測SQL中錯誤類型的日期。SQL中的錯誤日期

例如:

Order1消息 - 2014年
Order2 - 2104
Order3 - 2041

我使用通配符會做的伎倆猜測case語句的一種形式。但在這方面我是一個初學者。

編輯 - 對不起,澄清,我的專欄實際上包含YYYY-MM-DD。不過,我只關心年份格式。 TSQL的數據類型爲Date

謝謝!

+0

你有沒有嘗試過「WHERE column_name_year SOUNDS LIKE'2014'」 – vrn53593

+0

難道你只有一年嗎?你知道這個數據類型是什麼嗎?你只關心未來的日期嗎? –

+0

不幸的是,SOUNDS LIKE在我的數據庫中不起作用。此外,就目前/未來而言 - 任何一個都沒問題。我的目標是隨着我學習更多關於SQL的知識,所以學習其中一個會非常出色。 – Autoc

回答

0

由於您的數據已經在日期列中,您無需擔心該值是否爲有效日期。

所以基本上你正在看 - 從我能告訴 - 看看日期是否落在預期的範圍內。

所以你可能要像做

SELECT * FROM MYTABLE WHERE MYDATE NOT BETWEEN '01/01/1900' AND '12/31/2020' 

(很明顯,你可以做任何你想要的數值範圍內,無論是靜態值或值存儲在選項表)

你可以進一步驗證它在動態範圍內,如下所示:

SELECT * FROM MYTABLE 
WHERE MYDATE NOT BETWEEN DATEADD(YEAR, -5, GETDATE()) AND DATEADD(YEAR, 5, GETDATE()) 

進一步的步驟將驗證它的範圍內,根據表中的其他一些領域,如用於記錄一個創建上日期,就像這樣:

SELECT T.* FROM MYTABLE T 
WHERE T.MYDATE NOT BETWEEN DATEADD(YEAR, -5, T.CREATEDON) AND DATEADD(YEAR, 5, T.CREATEDON) 

這給你更多的靈活性,因爲「不正確的「日期實際上可能在另一個時間點有效。

這應該給你一些起點,從中你可以充實你的確切需求。

+1

''01/01/1900'AND '12/31/2020''非常依賴於語言環境的格式。最好使用'YYYYMMDD'格式,這些是場所中立的。 –

+0

@TT。有效的考慮要注意。 – eidylon

0

假設你使用的是varchar字段(通過評論)試試,

Where your_column not like '200_' or your_column not like '201_' 

,如果你使用的是INT爲一年,你可以使用一系列

Where your_column not between 2000 and 2014 
+0

這讓我獲得了一個好的開始。我把你的答案和eidylon的答案一起。謝謝! – Autoc