0

我正在尝试更改列的日期格式,该列设置为 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

4

3 回答 3

3

假设您的日期是 format yyyymmdd,您可以将 varchar 转换为 datetime ,如下所示:

select convert(datetime, columname, 112)
于 2012-06-22T16:14:31.833 回答
2

从您的 SQL 中可以看出,您的日期字符串的格式为YYYYMMDD

使用CASTorCONVERT函数应该可以很好地转换:

例如

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

两者都将预期值作为日期时间返回。

编辑:根据您指定的提供格式,我将使用 将SubString提供的数据稍微切下:

例如

SELECT CONVERT(datetime,SUBSTRING('20120601',1,8))    
于 2012-06-22T16:15:15.143 回答
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
于 2012-06-22T16:19:19.900 回答