我的此查询运行无错:
Select
[Object],
CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6) END AS [MEDIA]
from JnlDataSection
WHERE [Object] = '061 STATEMENTS'
我对此表感兴趣的第三列名为Date。但是数据库是很久以前开发的,并且那个人将日期变成了(numeric(17,9), not null
数据类型。例如。 20130106.050257023
。
我想要的是将其分为两个不同的列,一个作为日期:2013-01-06
,第二个作为时间:05:02:57
(无微秒)。
我想出了这个转换的查询:
Select
[Object],
CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS DATE) 'Date',
LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6) END AS [MEDIA]
from JnlDataSection
WHERE [Object] = '061 STATEMENTS'
AND CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
substring(convert(varchar(50), [Date]), 5, 2) + '-' +
substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
CONVERT(date, DATEADD(day, -1, getdate())) --Converting
但是,当我运行此命令时收到此错误:
Msg 8116,Level 16,State 1,Line 1
对于子字符串函数的参数1,参数数据类型numeric无效。
任何人都可以修改我的查询以使其无错运行吗?非常感谢。
答案 0 :(得分:2)
数据是数字类型。您必须先将其转换为字符串类型,然后才能将其与子字符串函数一起使用:
substring(cast([date] as varchar(18)), 10,2)
就此而言,您的最终目标应该是将这些值转换为日期时间列。