Convert varchar to datetime in sql which is having millisec

前端 未结 5 1068
广开言路
广开言路 2021-01-03 08:04

I have a column abc varchar(100) with data like 2011-09-26 16:36:57.810000

I want to convert this column to DATETIME...

<
相关标签:
5条回答
  • 2021-01-03 08:38

    Based on GBrian's answer, I came up with:

    CONVERT(DATETIME, CONVERT(DATETIME2, abc, 126))
    

    I haven't benchmarked how this stacks up against the substring-based solutions.

    0 讨论(0)
  • 2021-01-03 08:40

    In case you need 6 digits precision use DATETIME2

    SELECT CONVERT(DATETIME2, '2016-08-09T08:08:50.358000', 126) as MSSQLDateTime2
    SELECT CONVERT(DATETIME, '2016-08-09T08:08:50.358', 126) as MSSQLDateTime
    
    0 讨论(0)
  • 2021-01-03 08:54

    SQL Server only supports 3 decimal places for milliseconds, so the following will work:

    Convert(DATETIME, SUBSTRING(abc, 0, 24) ,120) 
    
    0 讨论(0)
  • 2021-01-03 09:00

    You can use style 121 but you can have only 3 digits for milliseconds (i.e yyyy-mm-dd hh:mi:ss.mmm(24h)) format.

    declare @abc varchar(100)='2011-09-26 16:36:57.810' 
    select convert(datetime,@abc,121)
    

    So you can sort it out by limiting the varchar field to 23 characters before converting as:

    declare @abc varchar(100)='2011-09-26 16:36:57.810000' 
    select convert(datetime,convert(varchar(23),@abc),121)
    

    Or use the Left() function to get first 23 characters as:

    select convert(datetime,left(@abc,23),121)
    

    Try to avoid storing date as string.

    0 讨论(0)
  • 2021-01-03 09:00

    Assuming we have the following string variables:

    DECLARE @d VARCHAR(100)  = '2020-04-06T04:35:07.9490051Z' -- 7 digits nanoseconds
    DECLARE @d1 VARCHAR(100) = '2020-04-05T15:00:00Z'         -- simple: without nanoseconds
    

    I came up to the solution using CAST operator:

    SELECT CAST(LEFT(@d,19) + 'Z' AS DATETIME)  -- outputs: 2020-04-06 04:35:07.000
    SELECT CAST(LEFT(@d1,19) + 'Z' AS DATETIME) -- outputs: 2020-04-05 15:00:00.000
    
    0 讨论(0)
提交回复
热议问题