簡體   English   中英

字符串到日期時間的轉換失敗,但如何找到導致它的行

[英]Conversion of string to datetime fails with exception how to find which row causes it

我目前正在將一些數據從非常老的數據庫(訪問2.0)導入sql server 2012數據庫。 我將所有數據(包括date字段(因為它具有01.01.2005的值為01.01.105)導入到varchar字段中。

然后,我嘗試將數據從臨時表導入到主表中。 到那時為止,所有這些都按預期工作,但是一旦我開始將數據從主表導入到主表中,我就遇到了主表中datetime字段的錯誤。

我總是在那里收到錯誤消息。

SQL mytemptable中的字段是(Nr-int和datum-varchar(50))mymaintable中的字段(orderNo-int和orderDate-Datetime)。

INSERT INTO mymaintable (orderNo, orderDate) SELECT
    Nr,
    TRY_PARSE(CASE WHEN len(datum) = 9
        THEN left(Datum,6) + CAST((CAST(right(Datum, 3) AS int) + 1900) AS varchar(4)) + ' 00:00:00.000'
        ELSE datum  + ' 00:00:00.000'
    END AS DATETIME USING 'de-DE') AS datum
FROM mytemptable;

錯誤信息

消息6521,級別16,狀態1,行1在語句執行期間發生了.NET Framework錯誤:System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出。 必須介於1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之間。 System.Data.SqlTypes.SqlTypeException:at System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan value)at System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime value)at System.Data.SqlServer.Internal.CXVariantBase.DateTimeToSSDate(DateTime dt)

其他資訊

我只嘗試了具有相同結果的選擇部分,但是又嘗試了另一組數據(20k行中只有1k)的功能,而沒有引發錯誤。

編輯:我試圖解決與另一篇文章中建議使用datetime2而不是datetime的問題,並且該功能起作用了。 但是當我試圖通過獲取datetime2轉換返回null的那些行來查找行時,我沒有收到任何結果。 實際上,這意味着DAtetime轉換會失敗,但datetime2轉換根本不會失敗。

從我所看到的(因為我已經成功地將其用於數據的不同部分)看來,這並不是一個普遍的錯誤,而是一個與數據相關的錯誤。 所以我的問題在那里:

有什么辦法找出導致問題的確切行嗎?

(據我了解,try_parse在發生轉換錯誤時應返回null,並且不會引發異常)

謝謝

由於datetime2起作用但datetime失敗,因此必須考慮到datetime在日期方面比datetime2更嚴格。 因此,通過修改SQL選擇,可以很容易地發現發生錯誤的位置:

 SELECT
    Nr,
    datum
FROM mytemptable
WHERE datum is not null and 
    TRY_PARSE(CASE WHEN len(datum) = 9
        THEN left(Datum,6) + CAST((CAST(right(Datum, 3) AS int) + 1900) AS varchar(4)) + ' 00:00:00.000'
        ELSE datum  + ' 00:00:00.000'
    END AS DATETIME2 USING 'de-DE') < '01.01.1753 00:00:00.000';

已添加“基准不為空”部分,以確保僅找到“未知”問題區域。 如果以上未找到任何結果,則應使用datetime認為可接受的最大日期(而不是最小日期)進行相同的處理。

這樣,就可以輕松找出轉換失敗的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM