我的日期格式为('INSERT INTO `users` (`crdate`, `description`, `first_name`) SELECT `t1`.`crdate`, `t1`.`description`, `t1`.`first_name` FROM `users` AS `t1`', [])
或SELECT `t1`.`crdate`, `t1`.`description`, `t1`.`first_name` FROM `users` AS `t1`;
2018-08-12 16:50:36 valid Heinz
2018-08-12 19:34:45 valid Hilde
2018-08-12 19:33:31 invalid Paul
。
此表达式返回31/01/1970
%d/%m/%Y
我认为NULL
字符可能有问题,而且
SELECT strftime('%d/%m/%Y','31/01/1970')
返回/
。
唯一可行的表达方式是
SELECT strftime('%d-%m-%Y','31-01-1970')
为什么?
PS:实际上,从sqlite3控制台出现语法错误。
答案 0 :(得分:2)
您误解了strftime
的工作方式。 this link期望其时间参数采用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));