- - PR -
CONVERTによる日付形式の指定方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-02-26 11:48
お世話になります。
SQLサーバー2000(SP4)を使用しています。 テーブルのあるフィールドに日付データがセットされています。 ・フィールド:BLDAT ・データ型:VARCHAR ・サイズ:8 ・値:20000208 このデータを「2000/02/08」として日付形式を変更して取得したいので、以下のようなSQL文を実行したのですが、思うような結果になりませんでした。 SELECT CONVERT(NVARCHAR(10), BLDAT, 111) FROM テーブル → 20000208 そこで一度、CASTを間に入れて以下のようにするとうまくいきました。 SELECT CONVERT(NVARCHAR(10), CAST(BLDAT AS DATETIME), 111) FROM テーブル → 2000/02/08 でもこんな強引なやり方で正しいのでしょうか? 単純にVBで「FORMAT関数」を使用するようにCONVERTで変換できないのでしょうか? いまいちCONVERTが理解できずに困っています。 他に簡潔で良い方法があればアドバイスをお願いします。 | ||||
|
投稿日時: 2008-02-26 11:59
まず datetiem に変換しないと無理。
そうしないと文字列から文字列に変換しようとしているだけなので、style=111 は意味を持たない。 [ メッセージ編集済み 編集者: 未記入 編集日時 2008-02-26 12:04 ] | ||||
|
投稿日時: 2008-02-26 12:27
未記入さん、レスありがとうございます。
では、やはり SELECT CONVERT(NVARCHAR(10), CAST(BLDAT AS DATETIME), 111) FROM テーブル とやるしかないと言うことですよね。 了解です、この方法で進めて行こうと思います。 ありがとうございました! | ||||
|
投稿日時: 2008-02-26 14:31
SQL Serverに変換を任せず、自分で文字連結する方法もあります。
| ||||
|
投稿日時: 2008-02-26 16:16
忠犬さん、いつもお世話になります。
「CONVERTとCASTの合わせ技」と「SUBSTRING」を使用するのとどちらが処理速度が速いのでしょうか?微々たる処理の為、体感出来る程の差は無いとは思いますが。 あとはSQL文の見た目の問題かもしれませんね。 いままでSQLサーバーから抽出した値を、VB上でFormat関数を使用して日付形式や金額形式へ変換していましたが、今後は出来る限りの処理はすべてSQLサーバーで行なわせてからVB上ではそのままの形で表示するといった形を考えています。 そうなると極力効率の良い処理を求めたいので。。。 | ||||
|
投稿日時: 2008-02-26 18:29
を比べると文字列操作の方が速いようですが、百万回実行して数秒の差ですからね。 | ||||
|
投稿日時: 2008-02-26 20:16
「そのままの形」ってなんでしょうね。スラッシュ区切りにした日付をあらわす文字列が「そのままの形」なのかな。VB でどのように扱うかにもよりますけど、VB で日付型の変数に代入したり、日付型を扱うコントロールに表示したりするのであれば、スラッシュ区切りの文字列よりも、日付型(datetime)を返したほうが扱いやすいのかもしれませんよ。 それなら、convert(datetime, BLDAT, 112) で済むし。 |
1