2011-07-17 21 views
1

私は自分のpgデータベースに日付を挿入したいのですが、正しいフォーマットとPgのヘルプが本当に助けにならないという手掛かりはありません。pgSQL:日付形式を挿入します(先行ゼロ)?

私はd-m-yyyy形式のフォームから私の日付を持っています。したがって、先行ゼロは省略されます。

これを正しく挿入するにはどうすればいいですか?先行するゼロ(pgまたはphp)を追加する機能はありますか?

+0

:関連する標準は[ISO 8601 *データ要素と交換形式 - 情報交換 - 日時の表記*](http://en.wikipedia.org/wiki/ISO-8601)です。 –

答えて

2
INSERT INTO TheTable (the_date) VALUES ('yyyy-mm-dd') 

は、SQL

で正しい順序
$psql_str = date('yyyy-mm-dd', date_parse_from_format('d-m-yyyy', $date_str)); 

expcted形式に$date_strを変換しています。

1

チェックto_date(text, text)機能(Table 9-21は、すべてのサポートされているパターンが含まれています):

SELECT to_date('1-9-2011', 'DD-MM-YYYY'); 
    to_date 
------------ 
2011-09-01 
(1 row) 

をあなたが先頭にゼロを見るとわかるように、出力日付で適切に追加されます。

0

最も良いことは、サーバーが持つ可能性のある設定に関係なく、常に動作することが保証されているため、明確な形式で日付を挿入することです。推奨フォーマットはYYYY-MM-DDです。あなたはこの機能をその形式に日付を変更することができます。

function convertDate($old) { 
    $date = explode('-', $old); 
    if (strlen($date[0]) == 1) 
     $date[0] = '0' . $date[0]; 
    if (strlen($date[1]) == 1) 
     $date[1] = '0' . $date[1]; 
    $new = date[2] . '-' . $date[1] . '-' . $date[0]; 
    return $new; 
} 

他のデータ形式も可能であるが、彼らは別のサーバから異なる場合があり設定に依存しているので、彼らは、あまり推奨されています。詳細については、the relevant section of the documentationをご覧ください。あなたがそのDateStyleのを確認した場合

0

実は、DMYに設定されている(または、より良い、 "ISOは、DMY")は、その後、あなたはを行う必要はありません。

ただ、完全性について
postgres=# create table test_table (date_field date); 
CREATE TABLE 

postgres=# show DateStyle; 
DateStyle 
----------- 
ISO, MDY 
(1 row) 

postgres=# set DateStyle='ISO, DMY'; 
SET 

postgres=# insert into test_table (date_field) values ('2-4-2011'); 
INSERT 0 1 

postgres=# select * from test_table; 
date_field 
------------ 
2011-04-02 
(1 row)