【问题标题】:Why does '%d-%m-%Y' format return always NULL?为什么 '%d-%m-%Y' 格式总是返回 NULL?
【发布时间】:2018-08-13 23:38:54
【问题描述】:

我有这种格式的日期31/01/1970%d/%m/%Y

这个表达式返回NULL

SELECT strftime('%d/%m/%Y','31/01/1970')

我认为这可能是 / 字符的问题,但也

SELECT strftime('%d-%m-%Y','31-01-1970')

返回NULL

似乎唯一有效的表达是

SELECT strftime('%Y-%m-%d','1970-01-31')

为什么?

PS:实际上从 sqlite3 控制台我得到一个语法错误。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    您误解了strftime 的工作原理。 strftime 期望其时间参数采用 ISO8601 格式(即日期为 YYYY-MM-DD),然后使用格式字符串格式化该时间。

    strftime 不是用于解析日期和时间,而是用于格式化它们。

    如果您想将 '31/01/1970' 解析为 SQLite 可以使用的格式,那么您将无法使用 substr

    select substr('31/01/1970', 7, 4) || '-' || substr('31/01/1970', 4, 2) || '-' ||  substr('31/01/1970', 1, 2);
    

    然后您可以将该字符串输入strftime 以对其进行格式化:

    select strftime('%d/%m/%Y', substr('31/01/1970', 7, 4) || '-' || substr('31/01/1970', 4, 2) || '-' ||  substr('31/01/1970', 1, 2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      相关资源
      最近更新 更多