为啥 '%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?
为啥 fusedLocationProviderClient.getLast 位置总是返回 null?