为啥 '%d-%m-%Y' 格式总是返回 NULL?

Posted

技术标签:

【中文标题】为啥 \'%d-%m-%Y\' 格式总是返回 NULL?【英文标题】: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 控制台我得到一个语法错误。

【问题讨论】:

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

【讨论】:

以上是关于为啥 '%d-%m-%Y' 格式总是返回 NULL?的主要内容,如果未能解决你的问题,请参考以下文章

我:正在尝试使用 STR_TO_DATE 但为啥返回 null?

为啥 findFragmentById 总是返回 null

为啥 fusedLocationProviderClient.getLast 位置总是返回 null?

为啥函数返回的值总是 null 或 undefined?

为啥 $address->hasCouponCode() 总是返回 null?

为啥 $helper->getSessionFromRedirect() 总是返回 NULL?