エンジニア的な技術的なブログ

webエンジニアの開発の知見を書きます。PHP、javascript、postgres、mysql、あと多少のインフラ周りとか。

postgreSQL, mySQLで文字列連結とその文字をdate型にキャストする

APIの作成をしていて、

DBから値を取得するときのWHERE句に日付を利用しようとし

 

渡されるパラメータ

$date = '2014-12-22'

 

でもDBのカラムは日付を下記のようにバラバラで持っている

CREATE TABLE schema.working_day
(
factory_working_day_id integer NOT NULL, -- 稼働日ID
year smallint NOT NULL, -- 年
month smallint NOT NULL, -- 月
day smallint NOT NULL, -- 日

)

 

なので、単純なSQLで比較はできない。

結果はWHERE句をこうしました。(PHPです)

 

"to_date(year || '-' || month || '-' || day, 'YYYY-MM-DD') < to_date('{$date}', 'YYYY-MM-DD')"

 

year || '-' || month || '-' || day, で文字列を連結して取得する。

to_date()で、date型にキャストする

 

これで解決できました。