2

我有一个数据库,由于某种原因,日期像 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 数据类型转换为 datetime 数据类型导致值超出范围。

然后我尝试在我的 View 语句中定义,以便该字段从一开始就是日期时间:

CONVERT(datetime, SUBSTRING(Datefield, 4, 2) + '/' 
    + SUBSTRING(Datefield, 6, 2) + '/' 
    + SUBSTRING(Datefield, 2, 2), 103) AS LookLikeDate

当我在该定义中遇到错误时,我根本无法使用视图,我将 datetime 更改为 Char(8),这给了我之前遇到的相同的 varchar 错误。

我是不是搞错了,有没有办法将这些日子添加到这种荒谬的日期格式中?

4

1 回答 1

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

如果您有以下示例数据

| 日期字段 |
|-----------|
| 1130801 |
| 1130812 |
| 1120827 |

那么上述两个查询的输出将是

| 新日期 |
|----------------------------------|
| 2013 年 8 月 31 日 00:00:00+0000 |
| 2013 年 9 月 11 日 00:00:00+0000 |
| 2012 年 9 月 26 日 00:00:00+0000 |

| 新日期 |
|----------|
| 1130831 |
| 1130911 |
| 1120926 |

分别。

这是SQLFiddle演示

于 2013-09-01T04:43:38.937 回答