0

我有这个无错误运行的查询:

Select
    [Object], 
    CASE WHEN MsgID = '61' THEN SUBSTRING(Parms,35,6) END AS [MEDIA]
from JnlDataSection
WHERE [Object] = '061 STATEMENTS'

我对此表感兴趣的第三列称为日期。但是数据库是很久以前开发的,并且开发人员已经将日期转换为(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

但是当我运行这个时我收到这个错误:

消息 8116,级别 16,状态 1,第 1 行
参数数据类型数字对于子字符串函数的参数 1 无效。

任何人都可以修改我的查询以使其无错误运行吗?那将不胜感激。

4

1 回答 1

2

数据是数字类型。您必须先将其转换为字符串类型,然后才能将其与 substring 函数一起使用:

substring(cast([date] as varchar(18)), 10,2)

就此而言,您的最终目标应该是将这些值转换为日期时间列。

于 2013-07-15T14:12:12.383 回答