yyyy/M/dをyyyy/MM/ddに変換

フラミア
2014-01-14 15:48 2669 4
yyyy/M/dをyyyy/MM/ddに変換について質問があります。
SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。

現状yyyy/M/d(2010/1/1)のようになっているのをyyyy/MM/dd(2010/01/01)に変換したい
のですが方法が分かりません。

SELECT
CONVERT(DATETIME,(CONVERT(VARCHAR(10),テーブルの値)),120)
FROM
テーブル名

とするとCHAR データ型から DATETIME データ型への変換の結果が日付/時刻の値の範囲外です。
というエラーになっていまいます。どういった方法なら実現できるのでしょうか。

すみませんがご教授ください。
宜しくお願い致します。

コメント

2014年 01月 14日 (19:25)
こんにちは。
イノ(inno)です。

下記のようにしてみてください。

-- #### テーブル作成
CREATE TABLE dbo.TempData
(
RegDatevarchar(10)
)

-- #### テストデータ登録
INSERT INTO dbo.TempData
SELECT '2010/1/1' UNION ALL
SELECT '2010/1/2' UNION ALL
SELECT '2010/1/3' UNION ALL
SELECT '2010/1/4'

-- #### データ確認
SELECT CONVERT(CHAR(10), CONVERT(DATETIME, RegDate),111)
FROM dbo.TempData
フラミア 2014年 01月 14日 (23:49)
ご回答いただき有難うございます。
いただいたサンプルでを実行したところ正常に変換されました。

それを元に下記に変更して実行してみたのですが

SELECT
CONVERT(CHAR(10), CONVERT(DATETIME, テーブルの値),111)
FROM
テーブル名

下記エラーメッセージが表示されてしまいます。元データが壊れて
いるってことなんでしょうか。

メッセージ 8115、レベル 16、状態 2、行 16
expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。
2014年 01月 15日 (10:40)
こんにちは。
イノ(inno)です。

そうでしたら、下記のようにしてみてください。
最初の回答の内容でエラーになったとしたら
現在のデータに日付型に合わないデータが含まれているからだと思います。
一応、下記のSQLだとエラーにはならないと思いますが、
間違えているデータは探して修正した方がいいかと思います。


-- #### テーブル作成
CREATE TABLE dbo.TempData
(
RegDate varchar(10)
)

-- #### テストデータ登録
INSERT INTO dbo.TempData
SELECT '2010/1/1' UNION ALL
SELECT '2010/1/2' UNION ALL
SELECT '2010/1/3' UNION ALL
SELECT '2010/1/4' UNION ALL
SELECT '2010/9/5' UNION ALL
SELECT '2010/10/14'

-- #### データ確認
SELECT LEFT(RegDate,4)+'/'
+RIGHT('0'+REPLACE(SUBSTRING(RegDate,6,2),'/',''),2)+'/'
+RIGHT('0'+REPLACE(RIGHT(RegDate,2),'/',''),2)
FROM dbo.TempData
フラミア 2014年 01月 16日 (11:17)
イノ(inno)さん。

出来ました!有難うございます!

そういう方法があったとは思いもよりませんでした。
非常に助かりました!

お礼が遅くなってしまい申し訳ありません。

あ~よかった・・・。