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 |

次に、上記の 2 つのクエリの出力は次のようになります。

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

| | NEWDATE |
|--------|
| | 1130831 |
| | 1130911 |
| | 1120926 |

それぞれ。

これがSQLFiddleのデモです

于 2013-09-01T04:43:38.937 に答える