我一直在查询,但是我仍然偶尔遇到挑战。我有一个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个数据点可用于报告,但是这一点正在打击我:)
谢谢大家。
爱德华
答案 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)