添加拼凑日期的天数

时间:2013-09-01 04:07:29

标签: sql sql-server datetime dateadd

我有一个数据库,出于某种原因,日期就像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错误。

我是否认为这是错误的,有没有办法将这几天添加到这种荒谬的日期格式中?

1 个答案:

答案 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 演示