将日期从varchar转换为日期

时间:2012-06-22 16:09:51

标签: sql sql-server

我正在尝试更改列的日期格式,该列设置为varchar列名称日期时间。问题是我实际上无法更改数据类型,因为数据是由PLC自动输入的。我需要日期或数字值的日期,因为当我运行我的查询时,我需要给系统一个日期范围。我正在尝试使用子字符串来解决此问题,但我收到的错误是数据类型超出范围。这是我的查询的语法。

select cast(
     (substring(datetime, 1, 4) + '-' +
      SUBSTRING(DateTime, 5, 2) + '-' + 
      SUBSTRING(DateTime, 7, 2) + ' ' + '00:00:00.000') as dateTime) as "Date"
    , ID1
    , ID2
    ,  diameter
    , WeightTheoretical
    , WeightActual
    , StockType 
from table1 
where datetime is not null 
    and datetime <> '' 
    and datetime <> '0' 
order by "Date", ID1;

编辑 - 日期格式为20120622:00:00:00:000

3 个答案:

答案 0 :(得分:3)

假设您的日期格式为yyyymmdd,您可以将varchar转换为日期时间,如下所示:

select convert(datetime, columname, 112)

答案 1 :(得分:2)

从您的SQL看,您的日期字符串的格式为YYYYMMDD

这应该使用CASTCONVERT函数转换为正常:

例如

SELECT CONVERT(datetime,'20120601')
SELECT CAST('20120601' as datetime)

都将期望值作为日期时间返回。

编辑:根据您指定的格式,我会使用SubString来提取数据:

例如

SELECT CONVERT(datetime,SUBSTRING('20120601',1,8))    

答案 2 :(得分:0)

根据表格中的数据格式(20120622:00:00:00:000),您可以执行以下操作:

declare @date varchar(50)
set @date = '20120622:00:00:00:000'

select cast(left(@date, 8) as datetime)

select convert(datetime, left(@date, 8))

结果:

2012-06-22 00:00:00.000