我有一个数据库,出于某种原因,日期就像1yymmdd一样。我被要求在查询中创建一个字段,在此日期中添加30天。我已将日期转换为可读格式,如下所示:
SUBSTRING(Datefield, 4, 2) + '/' + SUBSTRING(Datefield, 6, 2)
+ '/' + SUBSTRING(Datefield, 2, 2) AS LookLikeDate
我把它放在一个视图中,然后尝试:
DATEADD(dd,30, CONVERT(datetime, v.[LookLikeDate], 103)
我一直收到错误消息
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
然后我尝试在我的View语句中定义,以便该字段从头开始是日期时间:
CONVERT(datetime, SUBSTRING(Datefield, 4, 2) + '/'
+ SUBSTRING(Datefield, 6, 2) + '/'
+ SUBSTRING(Datefield, 2, 2), 103) AS LookLikeDate
当我在该定义中出现错误时,根本无法使用视图,我将datetime更改为Char(8),这给了我之前获得的varchar错误。
我是否认为这是错误的,有没有办法将这几天添加到这种荒谬的日期格式中?
答案 0 :(得分:1)
只需添加30天即可
SELECT DATEADD(dd, 30, RIGHT(datefield, 6)) NewDate
FROM table1
要添加30天并转换回该格式,请使用
SELECT '1'+ CONVERT(VARCHAR(6), DATEADD(dd, 30, RIGHT(datefield, 6)), 12) NewDate
FROM table1
如果您有以下样本数据
| DATEFIELD | |-----------| | 1130801 | | 1130812 | | 1120827 |
然后上面提到的两个查询的输出将是
| NEWDATE | |----------------------------------| | August, 31 2013 00:00:00+0000 | | September, 11 2013 00:00:00+0000 | | September, 26 2012 00:00:00+0000 |
和
| NEWDATE | |---------| | 1130831 | | 1130911 | | 1120926 |
分别
这是 SQLFiddle 演示