我想知道是否有一種方法可以在一般意義上檢測SQL中錯誤類型的日期。SQL中的錯誤日期
例如:
Order1消息 - 2014年
Order2 - 2104
Order3 - 2041
我使用通配符會做的伎倆猜測case語句的一種形式。但在這方面我是一個初學者。
編輯 - 對不起,澄清,我的專欄實際上包含YYYY-MM-DD
。不過,我只關心年份格式。 TSQL的數據類型爲Date
。
謝謝!
我想知道是否有一種方法可以在一般意義上檢測SQL中錯誤類型的日期。SQL中的錯誤日期
例如:
Order1消息 - 2014年
Order2 - 2104
Order3 - 2041
我使用通配符會做的伎倆猜測case語句的一種形式。但在這方面我是一個初學者。
編輯 - 對不起,澄清,我的專欄實際上包含YYYY-MM-DD
。不過,我只關心年份格式。 TSQL的數據類型爲Date
。
謝謝!
由於您的數據已經在日期列中,您無需擔心該值是否爲有效日期。
所以基本上你正在看 - 從我能告訴 - 看看日期是否落在預期的範圍內。
所以你可能要像做
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)
這給你更多的靈活性,因爲「不正確的「日期實際上可能在另一個時間點有效。
這應該給你一些起點,從中你可以充實你的確切需求。
''01/01/1900'AND '12/31/2020''非常依賴於語言環境的格式。最好使用'YYYYMMDD'格式,這些是場所中立的。 –
@TT。有效的考慮要注意。 – eidylon
假設你使用的是varchar字段(通過評論)試試,
Where your_column not like '200_' or your_column not like '201_'
,如果你使用的是INT爲一年,你可以使用一系列
Where your_column not between 2000 and 2014
這讓我獲得了一個好的開始。我把你的答案和eidylon的答案一起。謝謝! – Autoc
你有沒有嘗試過「WHERE column_name_year SOUNDS LIKE'2014'」 – vrn53593
難道你只有一年嗎?你知道這個數據類型是什麼嗎?你只關心未來的日期嗎? –
不幸的是,SOUNDS LIKE在我的數據庫中不起作用。此外,就目前/未來而言 - 任何一個都沒問題。我的目標是隨着我學習更多關於SQL的知識,所以學習其中一個會非常出色。 – Autoc