我正在尝试更改列的日期格式,该列设置为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
答案 0 :(得分:3)
假设您的日期格式为yyyymmdd
,您可以将varchar转换为日期时间,如下所示:
select convert(datetime, columname, 112)
答案 1 :(得分:2)
从您的SQL看,您的日期字符串的格式为YYYYMMDD
这应该使用CAST
或CONVERT
函数转换为正常:
例如
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