SQL Server:如何将此字符串转换为日期时间?

时间:2018-08-17 21:30:45

标签: sql sql-server sql-server-2014

我一直在查询,但是我仍然偶尔遇到挑战。我有一个SQL Server 2014数据库,我要拉一个应该保存日期时间值的特定列,但是它具有这种可怕的胡言乱语,以Varchar(2000)的形式出现:

0:2018061503410000:0.000000:35:0

我需要将其转换为显示真实的日期时间,例如6-15-2018 03:41 AM甚至是2018-6-15 3:41

到目前为止,我已经能够将其转换为:201806150341

通过使用以下SQL语句:

left(replace(o.dsply_val, '0:', ''), 12) as RRT_Arrival_Time1

但是将其导出到Excel之后,仍然很难掩盖它以显示为日期或其他任何内容。 Excel希望将其读取为数字,但是当我转换为datetime时,它无法正确读取。

在此方面的任何帮助将不胜感激。我已经有25个数据点可用于报告,但是这一点正在打击我:)

谢谢大家。

爱德华

2 个答案:

答案 0 :(得分:3)

您可以使用一些子字符串和填充进行转换,然后转换为日期时间。即:

select cast(stuff(stuff(substring(o.dsply_val,3,12),11,0,':'),9,0,' ') as datetime) as RRT_Arrival_Time1 
from myTable o;

这是我们的工作,首先获取它的子字符串以提取201806150341部分,然后填充:和一个空格,使其变为'20180615 03:41',我们可以将其简单地转换为日期时间。

HTH

答案 1 :(得分:1)

好吧,您可以尝试将convert()提取为bigint的字符串,使用format()对其进行更常见的日期时间表达式,然后使用convert()datetime

convert(datetime,
        format(convert(bigint,
                       left(replace(o.dsply_val,
                                    '0:',
                                    ''),
                            12)),
               '0000-00-00 00:00')
        +
        ':00',
        120)