こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2013-12-19 19:50:48

QNo.8393113

すぐに回答ほしいです

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

こんにちは。

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

投稿日時 - 2013-12-24 11:59:12

お礼

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

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

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

あ~よかった・・・。

投稿日時 - 2014-01-09 12:17:10

ANo.3

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

文字列型の数値変換ですか?
意味不明です。

数字自体、文字列ではないので。
数値型からデートタイムに変換するべきことです。

私自身よく出来た話です。
文字列型から、デートタイムに変換すると
yyyy/m/dなら出来ますが、
yyyy/mm/ddに変換は不可能です。

数値型でもキー入力で数字に変換されますから、
他のウェブサイトで拝見したほうがよろしい。
楽天市場の買い物の数値型も。

投稿日時 - 2013-12-25 21:55:17

ANo.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スクリプトを使えばもう少しシンプルに書けます。

投稿日時 - 2013-12-23 03:21:24

お礼

toshih2000さん、お蔭様で出来ました。
ご回答いただき有難うございました。

お礼が遅くなってすみません。

投稿日時 - 2014-01-09 12:20:34

ANo.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

投稿日時 - 2013-12-20 10:16:08

補足

ご回答いただき有難うございます。
いただいたサンプルでを実行したところ正常に変換されました。

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

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

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

メッセージ 8115、レベル 16、状態 2、行 16
expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。

投稿日時 - 2013-12-20 19:44:42

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-