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

解決済みの質問

postgreSQLで分からないことがあります。

postgreSQLで分からないことがあります。
よろしくお願いします。

下にあるtblというテーブルがあったとき。
下のSQLを実行するとデータがうまく取れているんですが、

CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列
なのに何故正しく比較できているのでしょうか?
日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか?

tblテーブル
*sdateとedateはtimestamp型です。
sdate      | edate |
-----------------------------------------
2010-5-1 10:00:00 | 2010-5-2 13:00:00|

SELECT
*
FROM
tbl
WHERE
CURRENT_DATE BETWEEN
SUBSTR(sdate, 1, 10) AND
SUBSTR(edate, 1, 10)

投稿日時 - 2010-06-23 20:19:01

QNo.5990099

困ってます

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

postgresqlのバージョン、バージョンが同じでもその環境によって動作が異なります。
質問をする際は最低限バージョンを明記した方が回答しやすくなります。

>CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列
>なのに何故正しく比較できているのでしょうか?
>日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか?

ご想像のとおりです。いい感じに処理をしてもらっている状態です。
本来は日付と文字列のどちらかを変換して型をそろえる必要がありますし、SUBSTRの引数も日付型ではなく文字列を与えるべきです。

ちなみに私は8.4.1を使用していますが、提示されているようなSQLはエラーとなります。

参考URLをひととおり読んでみてください。
7.4から8.4にバージョンアップした経験があるのですが、システムで発行しているSQLがバタバタとエラーになり、日頃いい加減なSQLを書いていたのだと思い知らされました。

参考URL:http://lets.postgresql.jp/documents/tutorial/cast/

投稿日時 - 2010-06-24 13:11:32

お礼

ありがとうございました。
バージョンを書き忘れていてました、以後
気をつけます。

曖昧なSQLだと、バージョンをあげたときに
大変そうなので気おつけます。

投稿日時 - 2010-06-24 13:33:38

ANo.1

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

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

回答(1)

あなたにオススメの質問