【发布时间】:2011-10-07 03:04:56
【问题描述】:
我想在我的 pg 数据库中插入一个日期,但我不知道正确的格式是什么,而且 pg 帮助也没有真正的帮助。
我的日期是 d-m-yyyy 格式。所以前导零被省略了。
如何正确插入,是否有添加前导零的功能(pg 或 php)?
【问题讨论】:
标签: php sql forms postgresql
我想在我的 pg 数据库中插入一个日期,但我不知道正确的格式是什么,而且 pg 帮助也没有真正的帮助。
我的日期是 d-m-yyyy 格式。所以前导零被省略了。
如何正确插入,是否有添加前导零的功能(pg 或 php)?
【问题讨论】:
标签: php sql forms postgresql
检查to_date(text, text) 函数(Table 9-21 包含所有支持的模式):
SELECT to_date('1-9-2011', 'DD-MM-YYYY');
to_date
------------
2011-09-01
(1 row)
如您所见,输出日期中正确添加了前导零。
【讨论】:
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));
将您的 $date_str 转换为预期格式。
【讨论】:
最好的办法是以明确的格式插入日期,因为无论服务器可能有任何设置,这都能保证始终有效。推荐的格式是 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 设置为 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)
【讨论】: