簡體   English   中英

在 SQL 服務器中將 varchar 轉換為 datetime2

[英]Converting varchar to datetime2 in SQL Server

我正在使用 SQL Server 2008 R2 並從平面文件導入。 我無法正確導入datetime列,因此我將其臨時指定為varchar(50) 現在我想將其轉換為datetime2格式。 然而,當我這樣做時,我得到了錯誤 -

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

當前在我的varchar(50)列中的數據如下所示:

2008-04-02-16.43.32.179530
2009-01-12-20.15.41.936632
2009-02-18-16.54.49.071662

將其轉換為datetime2的最佳方法是什么?

不漂亮

;WITH T(YourCol) As
(
SELECT '2008-04-02-16.43.32.179530' union all
SELECT '2009-01-12-20.15.41.936632' union all
SELECT '2009-02-18-16.54.49.071662'
)
SELECT CAST(
            STUFF(REPLACE(
                          STUFF(YourCol,11,1,'T')
                  ,'.',':')
            ,20,1,'.')
        AS DATETIME2)
FROM T

不幸的是,這不是公認的時間戳格式。 它接近 ODBC 規范格式,但不完全。 你必須做一些字符串操作。

如果您取前 10 個字符,那就是 ODBC 規范 (yyyy-mm-dd) 格式的日期,無需更改。 這很簡單: LEFT(dateAsStringColumn, 10) 現在,您需要字符 12 到 19(跳過日期和時間之間的破折號),但需要使用“.”。 取而代之 ”:”。 最后,逐字添加字符 20-26。 使用樣式 21(ODBC 規范,毫秒)將整個事情轉換為 Datetime2。

嘗試這個:

SELECT CONVERT(datetime2, LEFT(myColumn, 10) + " " + REPLACE(SUBSTRING(myColumn, 12, 8), ".", ":") + RIGHT(myColumn, 7), 21) as DateFromString FROM myTable

暫無
暫無

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

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