アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。

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

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

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

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

A 回答 (4件)

こんにちは。



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

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

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

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

あ~よかった・・・。

お礼日時:2014/01/09 12:17

文字列型の数値変換ですか?


意味不明です。

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

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

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

一つの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スクリプトを使えばもう少しシンプルに書けます。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2014/01/09 12:20

こんにちは。


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

-- #### テーブル作成
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 に変換中に、算術オーバーフロー エラーが発生しました。

補足日時:2013/12/20 19:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す