开发者

Converting varchar to datetime2 in SQL Server

开发者 https://www.devze.com 2023-03-01 05:47 出处:网络
I\'m using SQL Server 2008 R2 and I did an import from a flat file. I couldn\'t import the datetime column properly so I specified it temporarily as a varchar(50). Now I want to convert it to the date

I'm using SQL Server 2008 R2 and I did an import from a flat file. I couldn't import the datetime column properly so I specified it temporarily as a varchar(50). Now I want to convert it to the datetime2 format. However when doing so I get the error -

开发者_如何学运维

Conversion failed when converting date and/or time from character string.

The data that is currently in my varchar(50) column looks like this:

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

What's the best way to convert it to datetime2?


Not pretty

;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


Unfortunately, that's not a recognized timestamp format. It's close to ODBC Canonical format, but not quite. You'll have to do some string manipulation.

If you take the first 10 characters, that's the date in ODBC Canonical (yyyy-mm-dd) format, no changes needed. That's easy enough: LEFT(dateAsStringColumn, 10). Now, you need characters 12 through 19 (skipping the dash between date and time), but with the "." replaced by ":". Lastly, tack on characters 20-26 verbatim. Convert that whole thing to a Datetime2 using style 21 (ODBC Canonical with milliseconds).

Try this:

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

精彩评论

暂无评论...
验证码 换一张
取 消