【问题标题】:I need to convert this string to datetime in SQL Server我需要在 SQL Server 中将此字符串转换为日期时间
【发布时间】:2019-01-04 13:25:44
【问题描述】:

字符串:

'01/04/2019 01:50:31.230000000'

预期结果:

01/04/2019 01:50:31.230

作为DATETIME

使用的查询:

SELECT CONVERT(DATETIME, '01/04/2019 01:50:31.230000000', 113)  

【问题讨论】:

  • datetime 值没有格式。它们以内部格式存储。
  • 你想要样式103。查看CONVERT 上的文档以获取样式代码列表。

标签: sql sql-server datetime sql-server-2012


【解决方案1】:

如果没有最后 6 个零,则转换 103 format 中的那个字符串会起作用。
因此,SUBSTRINGLEFT 只能用于保留 23 个字符。
然后将其转换为 DATETIME。

但是该字符串可以很好地转换为 DATETIME2。
因为 DATETIME2 更准确。
DATETIME2 可以简单地转换或转换为 DATETIME。

请注意,DATETIME 不以格式存储在表中。
它的显示方式是一种设置。

但是,您可以将 FORMAT 一个 DATETIME 返回到您需要的 specific format 中的字符串。 (从 SQL Server 2012 开始)

示例 sn-p:

select 
col as col_input_string,
CAST(CONVERT(datetime2, col, 103) AS datetime) as col_as_datetime,
FORMAT(CONVERT(datetime2, col, 103), 'dd/MM/yyyy HH:mm:ss.fff') as col_as_formatted_string
from (values 
 ('01/04/2019 01:50:31.230000000')
,('31/12/2018 13:33:44.123456789')
) q(col);

结果:

col_input_string                col_as_datetime             col_as_formatted_string
01/04/2019 01:50:31.230000000   2019-04-01 01:50:31.230     01/04/2019 01:50:31.230
31/12/2018 13:33:44.123456789   2018-12-31 13:33:44.123     31/12/2018 13:33:44.123

【讨论】:

    【解决方案2】:

    你想要的代码是:

    SELECT CONVERT(datetime,LEFT('01/04/2019 01:50:31.230000000',23),103);
    

    您需要使用LEFT,因为datetime 只能精确到1/300 秒;因此你需要修剪不能使用的精度。

    【讨论】:

    • 您也可以简单地使用 datetime2 ... CONVERT(DATETIME2, '01/04/2019 01:50:31.230000000',103)
    【解决方案3】:

    尝试使用

    declare @vardate varchar(50) = '01/04/2019 01:50:31.230000000'
    declare @date datetime =convert(date, left(@vardate,23), 103)
    declare @time time = convert(time, substring(@vardate,12,12), 14)
    
    select DATEADD(DAY, DATEDIFF(DAY, @time, @date), CAST(@time AS DATETIME)) AS Result
    

    如果这不起作用,请检查不同的转换格式。

    【讨论】:

    • date 没有时间部分;这不会给出 OP 想要的结果。
    • 你测试过吗?为什么不直接使用datetime..?
    • 我试过了,但我找不到适合“dd/mm/yyyy hh:mm:ss.mmm”的转换格式
    猜你喜欢
    • 2019-08-31
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多