簡體   English   中英

約會時間! 從字符串轉換日期和/或時間時轉換失敗

[英]Datetime! Conversion failed when converting date and/or time from character string

我嘗試將帶有時間戳的列從nvarchar轉換為datetime (因為我不確定通過將 Excel 導出到 SQL Server,時間戳內的精度不會丟失),但該列仍然無法轉換,顯示相同的錯誤時間

從字符串轉換日期和/或時間時轉換失敗 - 轉換

我試過

alter table X 
    alter column [Timestamp] datetime

我也試過:

convert(datetime, [Timestamp], 103)
try_convert(datetime, [Timestamp], 103)
cast ([Timestamp] as datetime)

仍然沒有進展。

這是列中的示例數據:

2019-02-13-13.01.05.6100000015
2019-02-18-13.10.46.4850000015

能否請你幫忙?

你可以試試這個:

select 
    try_convert(datetime2(7), 
                 STUFF(STUFF(REPLACE('2019-02-18-13.10.46.485000015','.',':'), 11, 1, ' '),20,1,'.')
               ,121)

最好將類型更改為DATETIME2,因為它比 DATETIME 具有更高的精度。

首先將時間戳字符串的格式更改為可以毫無問題地轉換為DATETIME2的格式。

UPDATE X
SET [Timestamp] = CONCAT(LEFT([Timestamp],10), 'T', REPLACE(SUBSTRING([Timestamp],12,8),'.',':'),  '.', SUBSTRING([Timestamp],21,9))
WHERE [Timestamp] LIKE '[12][0-9][0-9][0-9]_[01][0-9]_[0-3][0-9]_[0-2][0-9].[0-6][0-9].[0-6][0-9].[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%';

然后仔細檢查是否還有一些不能按原樣投射。

SELECT COUNT(*) Errors, MAX([Timestamp]) Example
FROM X
WHERE TRY_CAST([Timestamp] AS DATETIME2) IS NULL;

如果計數為 0,則可以更改列的類型。

ALTER TABLE X 
  ALTER COLUMN [Timestamp] DATETIME2(7);

這里對 reextester 進行測試

請注意,會丟失一些精度。

暫無
暫無

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

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