- - PR -
convert関数について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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'の形式で取得するにはどうしたら良いでしょうか? |
|
投稿日時: 2008-08-26 16:00
ほかにもっとよい方法あるかもしれませんが、いったん日付型に変換してはいかがでしょうか?
CONVERT(char,CONVERT(datetime, HOGE_DATE),111) AS HOGE_DATE |
|
投稿日時: 2008-08-26 16:03
この例だとCONVERT(char, HOGE_DATE, 111)とやっているHOGE_DATEが
Datetime型でなければならないと期待されたものは得られないと思います。 |
|
投稿日時: 2008-08-26 16:10
GENZOさんもん吉さん有難う御座います。
質問の前にdatetime型にコンバートするのも試したのですが、 下記のエラーが出る為datetime型にコンバートするのは回避していました。 ------------------------------------------------------------------- メッセージ 8115、レベル 16、状態 2、行 1 expression をデータ型 datetime に変換中に、算術オーバーフロー エラーが発生しました。 ------------------------------------------------------------------- やはり文字列に変換し対象文字列を抜き出し文字連結で'/'を付与してあげる以外ないのでしょうか? 見た目が悪い為、シンプルに出来ればと思っております。 |
|
投稿日時: 2008-08-26 16:24
SQLServerにはあまり自信がないので下記のリンクを読んでみたのですが、
元の文字列か数値を 112 を使って DateTime 型にした後、111 を使って yyyy/mm/dd 形式の文字列に変換するのかな? http://msdn.microsoft.com/ja-jp/library/ms187928.aspx |
|
投稿日時: 2008-08-26 16:32
ここまでしないとダメなのかなぁ
もっと簡単に出来そうだけど、私にはすぐには分からなかった・・・ select convert(varchar,cast(cast(YMD as varchar) as datetime),111) from TEST |
|
投稿日時: 2008-08-26 16:44
皆様有難う御座います。
rainさん やはり元の数値をDateTime型に変換する際に 算術オーバーフローエラーになるので無理そうです。 ひろれいさん 私がやっていた文字連結よりも全然ソースは綺麗です。(LEFT関数とかSUBSTRING関数を使用していましたので・・・) ひろれいさんに教えて頂いた方法でいきたいと思います。 有難う御座いました。 |
1