- PR -

convert関数について

1
投稿者投稿内容
キンタロス
常連さん
会議室デビュー日: 2008/01/16
投稿数: 20
投稿日時: 2008-08-26 14:59
御世話になっております。キンタロスです。

今回sqlserver2005を使用しプログラムを作成しています。

ある数値項目(20080101みたいに日付データが入っています)をフォーマットを噛まして
'yyyy/MM/dd'の形式で取得したいのですがうまくいきません。

select文
--------------------------------------------
SELECT
CONVERT(char, HOGE_DATE, 111) AS HOGE_DATE
FROM
HOGE
--------------------------------------------

フォーマットのやり方を調べて上記のようにCONVERT関数を使用して
スタイルに111を指定すれば'yyyy/MM/dd'の形式で取得出来るとなっていましたが
実際には数値データが20080101の場合はそのまんま'20080101'で取得してしまいます。
'yyyy/MM/dd'の形式で取得するにはどうしたら良いでしょうか?
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-08-26 16:00
ほかにもっとよい方法あるかもしれませんが、いったん日付型に変換してはいかがでしょうか?
CONVERT(char,CONVERT(datetime, HOGE_DATE),111) AS HOGE_DATE
もん吉
常連さん
会議室デビュー日: 2008/05/16
投稿数: 36
投稿日時: 2008-08-26 16:03
この例だとCONVERT(char, HOGE_DATE, 111)とやっているHOGE_DATEが
Datetime型でなければならないと期待されたものは得られないと思います。
キンタロス
常連さん
会議室デビュー日: 2008/01/16
投稿数: 20
投稿日時: 2008-08-26 16:10
GENZOさんもん吉さん有難う御座います。

質問の前にdatetime型にコンバートするのも試したのですが、
下記のエラーが出る為datetime型にコンバートするのは回避していました。
-------------------------------------------------------------------
メッセージ 8115、レベル 16、状態 2、行 1
expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。
-------------------------------------------------------------------

やはり文字列に変換し対象文字列を抜き出し文字連結で'/'を付与してあげる以外ないのでしょうか?
見た目が悪い為、シンプルに出来ればと思っております。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-08-26 16:24
SQLServerにはあまり自信がないので下記のリンクを読んでみたのですが、
元の文字列か数値を 112 を使って DateTime 型にした後、111 を使って yyyy/mm/dd 形式の文字列に変換するのかな?
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx

ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2008-08-26 16:32
ここまでしないとダメなのかなぁ
もっと簡単に出来そうだけど、私にはすぐには分からなかった・・・

select convert(varchar,cast(cast(YMD as varchar) as datetime),111) from TEST
キンタロス
常連さん
会議室デビュー日: 2008/01/16
投稿数: 20
投稿日時: 2008-08-26 16:44
皆様有難う御座います。

rainさん
やはり元の数値をDateTime型に変換する際に
算術オーバーフローエラーになるので無理そうです。

ひろれいさん
私がやっていた文字連結よりも全然ソースは綺麗です。(LEFT関数とかSUBSTRING関数を使用していましたので・・・)
ひろれいさんに教えて頂いた方法でいきたいと思います。

有難う御座いました。
1

スキルアップ/キャリアアップ(JOB@IT)