• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:yyyy/M/dをyyyy/MM/ddに変換)

SQLServer 2005でyyyy/M/dからyyyy/MM/ddに日付変換したい方法

このQ&Aのポイント
  • SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。現状yyyy/M/d(2010/1/1)のようになっているのをyyyy/MM/dd(2010/01/01)に変換したいのですが方法が分かりません。
  • SELECT CONVERT(DATETIME,(CONVERT(VARCHAR(10),テーブルの値)),120) FROM テーブル名とするとCHAR データ型から DATETIME データ型への変換の結果が日付/時刻の値の範囲外です。というエラーになっています。どういった方法なら実現できるのでしょうか。すみませんがご教授ください。
  • 質問者はSQLServer 2005で文字列型に入っている日付データをyyyy/MM/ddの形式に変換したいという問題に直面しています。現在のデータはyyyy/M/d(例:2010/1/1)の形式で保存されており、変換方法を知りたいとのことです。提供されたSQLコードでは、CONVERT関数を使用してdatetime型に変換しようとしていますが、範囲外の値のためエラーが発生しています。適切な方法を教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.3

こんにちは。 そうでしたら、下記のようにしてみてください。 最初の回答の内容でエラーになったとしたら 現在のデータに日付型に合わないデータが含まれているからだと思います。 一応、下記の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

madamadahiyoko
質問者

お礼

出来ました!有難うございます! そういう方法があったとは思いもよりませんでした。 非常に助かりました! お礼が遅くなってしまい申し訳ありません。 あ~よかった・・・。

その他の回答 (3)

noname#204068
noname#204068
回答No.4

文字列型の数値変換ですか? 意味不明です。 数字自体、文字列ではないので。 数値型からデートタイムに変換するべきことです。 私自身よく出来た話です。 文字列型から、デートタイムに変換すると yyyy/m/dなら出来ますが、 yyyy/mm/ddに変換は不可能です。 数値型でもキー入力で数字に変換されますから、 他のウェブサイトで拝見したほうがよろしい。 楽天市場の買い物の数値型も。

回答No.2

一つのSQLだけでは、良い方法が思いつきませんね。 結局、文字列から月と日の部分を正しく抜き出せていないのですよね。 カーソル使ってグルグル回すしかないかな~ 以下は正確な構文ではありません動作確認もしていません、イメージだけくみ取ってください。 ちなみに、年の部分は必ず 4桁であることを前提としています。 -- fetch set @DD = (SELECT テーブルの値) set @L1 = CHARINDEX (@DD, '/', 4)) -- 月と日の間の'/' の位置を取得 set @L2 = LEN(@DD) -- 文字列の長さを取得 SELECT CONVERT (DATETIME, DATEFROMPARTS (LEFT(@DD,4), MID(@DD, 6, @L1 - 6, RIGHT( @DD, @L2 - @L1)), 111) -- こんな感じでできるとおもいます。 VBスクリプトを使えばもう少しシンプルに書けます。

madamadahiyoko
質問者

お礼

toshih2000さん、お蔭様で出来ました。 ご回答いただき有難うございました。 お礼が遅くなってすみません。

  • innoya
  • ベストアンサー率71% (10/14)
回答No.1

こんにちは。 下記のようにしてみてください。 -- #### テーブル作成 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' -- #### データ確認 SELECT CONVERT(CHAR(10), CONVERT(DATETIME, RegDate),111) FROM dbo.TempData

madamadahiyoko
質問者

補足

ご回答いただき有難うございます。 いただいたサンプルでを実行したところ正常に変換されました。 それを元に下記に変更して実行してみたのですが SELECT CONVERT(CHAR(10), CONVERT(DATETIME, テーブルの値),111) FROM テーブル名 下記エラーメッセージが表示されてしまいます。元データが壊れて いるってことなんでしょうか。 メッセージ 8115、レベル 16、状態 2、行 16 expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。

関連するQ&A