pgSQL:插入日期格式(前导零)?

Posted

技术标签:

【中文标题】pgSQL:插入日期格式(前导零)?【英文标题】:pgSQL : insert date format (leading zeros)? 【发布时间】:2011-10-07 03:04:56 【问题描述】:

我想在我的 pg 数据库中插入一个日期,但我不知道正确的格式是什么,而且 pg 帮助也没有真正的帮助。

我的日期是 d-m-yyyy 格式。所以前导零被省略了。

如何正确插入,是否有添加前导零的功能(pg 或 php)?

【问题讨论】:

为了完整起见:相关标准为ISO 8601 Data elements and interchange formats -- Information interchange -- Representation of dates and times 【参考方案1】:

检查to_date(text, text) 函数(Table 9-21 包含所有支持的模式):

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

如您所见,输出日期中正确添加了前导零。

【讨论】:

【参考方案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));

将您的 $date_str 转换为预期格式。

【讨论】:

【参考方案3】:

最好的办法是以明确的格式插入日期,因为无论服务器可能有任何设置,这都能保证始终有效。推荐的格式是 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。

【讨论】:

【参考方案4】:

实际上,如果您确认 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)

【讨论】:

以上是关于pgSQL:插入日期格式(前导零)?的主要内容,如果未能解决你的问题,请参考以下文章

C# 日期时间格式化

javascript Date format(js日期格式化)

iOS开发中的NSDateFormatter日期格式解析总结

从 Oracle 日期中删除前导零

DateTime 时间格式

日期相关函数