我有一個名爲Cases
的主表,我正在將數據插入。我有一個替代表,其中存儲了名爲rawTableData
的所有原始數據,然後將其發送到主表。從具有潛在錯誤日期字符串的大記錄表中將nvarchar轉換爲datetime
我在rawTableData
一個nvarchar
列,在這種格式
2016-04-04-10.50.02.351232
我在Cases
表中的列具有的DATETIME
數據類型存儲日期時間字符串。
我第一次嘗試找到下面
SELECT CONVERT(datetime, nvarcharDateColumn, 103)
FROM rawTableData
WHERE ISDATE(CONVERT(datetime, nvarcharDateColumn, 103)) != 1
在這種方法中,壞數據和我得到以下
錯誤nvarchar數據類型到datetime數據類型的轉換導致的出範圍值。
然後我嘗試了不同的方法,希望能找到所有的超出範圍的值
SELECT nvarcharDateColumn
FROM rawTableData
WHERE ISDATE(nvarcharDateColumn)
但是,只有返回自nvarchar的所有行。
再次,我堅持下來了,並嘗試了不同的方法
SELECT CONVERT(DATETIME, CASE WHEN ISDATE(nvarcharDateColumn) = 1 THEN nvarcharDateColumn END, 103)
FROM rawTableData
我不知道我在做什麼錯在這裏和任何幫助,將不勝感激。
我使用SQL Server 2012的
'則IsDate ()'是衆所周知的不準確的,並且將日期存儲爲字符串並沒有真正的幫助。既然它是說它導致了一個超出範圍的值,那麼你有沒有比1753-01-01更早的日期? – Siyual
@Siyual沒有範圍是在2013-2017之間,我認爲其中一些日期可能是美國和英國 – imBlue
這可能是問題所在 - 如果您將兩種格式的日期存儲在同一個字段中,則無法確定這是哪個(ISO標準是'yyyy-MM-dd') – Siyual