![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。
現状yyyy/M/d(2010/1/1)のようになっているのをyyyy/MM/dd(2010/01/01)に変換したい
のですが方法が分かりません。
SELECT
CONVERT(DATETIME,(CONVERT(VARCHAR(10),テーブルの値)),120)
FROM
テーブル名
とするとCHAR データ型から DATETIME データ型への変換の結果が日付/時刻の値の範囲外です。
というエラーになっていまいます。どういった方法なら実現できるのでしょうか。
すみませんがご教授ください。
宜しくお願い致します。
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
出来ました!有難うございます!
そういう方法があったとは思いもよりませんでした。
非常に助かりました!
お礼が遅くなってしまい申し訳ありません。
あ~よかった・・・。
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スクリプトを使えばもう少しシンプルに書けます。
No.1
- 回答日時:
こんにちは。
下記のようにしてみてください。
-- #### テーブル作成
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
この回答への補足
ご回答いただき有難うございます。
いただいたサンプルでを実行したところ正常に変換されました。
それを元に下記に変更して実行してみたのですが
SELECT
CONVERT(CHAR(10), CONVERT(DATETIME, テーブルの値),111)
FROM
テーブル名
下記エラーメッセージが表示されてしまいます。元データが壊れて
いるってことなんでしょうか。
メッセージ 8115、レベル 16、状態 2、行 16
expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
SQLite3のtext→date変換について
-
Accessの数値から時間に変換す...
-
VBAについて
-
式ビルダで曜日文字列取得
-
日付書式に変換でこまっています!
-
今日の日付が入った行のデータ...
-
23時59分59秒までのデータを抽...
-
SQL スクリプトのご相談
-
sqlのwhere句で下記の条件にし...
-
Group By を使用して任意のカラ...
-
Excelの関数の使い方
-
エクセルの日付に時差を加算 #V...
-
日付型なら変数の先頭になん...
-
SQLで今日の日付でWhereしたい
-
oracle 文字列 01:45 を時間に...
-
重複するIDのデータを1行にま...
-
Accessのマクロでモジュールを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
エクセル 日付による並べ替え...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
テーブルの主キーをdate型...
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
エクセルのヘッダーを変数で指...
-
yyyy/M/dをyyyy/MM/ddに変換
-
Excelグラフの日付軸の日付がず...
-
oracle 文字列 01:45 を時間に...
-
ExcelのSUMPRODUCTで日付の範囲...
-
wordの差し込み印刷での日付表示
-
DB2のSQL(日付)について
-
WHERE句にて「30日前から今日ま...
-
23時59分59秒までのデータを抽...
-
SQL/Loaderでの年月日時分秒の...
おすすめ情報