我有一個名爲ArrivalDate的VARCHAR字段的表,格式爲yymmdd(如170202)。 我寫它轉換它爲yyyymmdd這樣一個查詢它應該成爲20170202.將YYMMDD格式的VARCHAR轉換爲YYYYMMDD並忽略無效的日期格式
但我的問題是,我需要照顧的情況下被輸入到現場不合適的數據,和我的查詢需要排除數據。我通過使用TSQL的ISDATE函數來實現這種排除。我也需要選擇最近的條目(我正在使用asc for order命令)。
我正在使用各種轉換器來編寫這個查詢,下面是我的實現與示例表和數據。
Declare @tmp TABLE (theDates VARCHAR(MAX))
INSERT INTO @tmp VALUES('170202')
SELECT TOP 1 t.theDates
WHEN (ISDATE(t.theDates) = 1) THEN CONVERT(VARCHAR(max),CONVERT(datetime t.theDates), 112)
FROM @tmp t
WHERE (ISDATE(t.theDates) = 1)
ORDER BY CAST(t.theDates as DATE)
不過,我不喜歡我的方法,它有時無法轉換和投用的值,如02年2月2日打破了查詢時出現錯誤。有人可以告訴我一個更好的書寫這種功能的方法。
非常感謝!
爲什麼你會將日期存儲爲日期? –
使用SQL Server 2012及更高版本,[TRY_CONVERT](https://msdn.microsoft.com/en-us/library/hh230993.aspx)可能是您正在查找的內容。 – Heinzi
這只是與@ErikPhilips合作的表格。我沒有寫模式,我不會將日期存儲爲VARCHAR – Mark