字符串:
'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)
答案 0 :(得分:3)
如果没有最后6个零,则可以转换103 format中的字符串。
因此,SUBSTRING
或LEFT
仅可用于保留23个字符。
然后将其转换为DATETIME。
但是该字符串可以很好地转换为DATETIME2。
由于DATETIME2更准确。
而且DATETIME2可以简单地强制转换或转换为DATETIME。
请注意,DATETIME未以某种格式存储在表中。
它的显示方式是一种设置。
但是,您可以FORMAT将DATETIME返回所需的specific format中的字符串。 (从SQL Server 2012开始)
示例片段:
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
答案 1 :(得分:2)
您想要的代码是:
SELECT CONVERT(datetime,LEFT('01/04/2019 01:50:31.230000000',23),103);
您需要使用LEFT
,因为datetime
仅精确到1/300秒;因此,您需要削减无法使用的精度。
答案 2 :(得分:0)
尝试使用
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
如果这样不起作用,请检查其他转换格式。