在sqllite 2013-10-29
我的查询是SELECT strftime('%Y-%m-%d', '29/10/2013')
但它显示空白输出。我不知道是什么问题。
我的日常事件
=================================
SELECT cast(julianday() - julianday((substr(date_time,7,4) || '-' || substr(date_time,4,2) || '-' || substr(date_time,0,3)))as integer) as DayDiff from sms_table
答案 0 :(得分:2)
根据documentation,strftime
的第二个参数是timestring
,需要采用以下格式之一:
- YYYY-MM-DD
- YYYY-MM-DD HH:MM
- YYYY-MM-DD HH:MM:SS
- YYYY-MM-DD HH:MM:SS.SSS
- YYYY-MM-DD 的Ť强> HH:MM
- YYYY-MM-DD 的Ť强> HH:MM:SS
- YYYY-MM-DD 的Ť强> HH:MM:SS.SSS
- HH:MM
- HH:MM:SS
- HH:MM:SS.SSS
- 立即强>
- DDDDDDDDDD
您的斜杠分隔字符串不是这些字符串,因此无法解析。
我建议您在首先将数据插入数据库之前更改格式(假设您的查询通常会在您的数据上运行)。
如果你不能这样做,你很可能需要使用字符串操作直接转换为首选格式,或者转换为上述形式之一,以便然后使用strftime
。
答案 1 :(得分:1)
如果您无法控制提供给数据库的日期字符串,则可以按此操作提交日期:
SELECT
REPLACE(SUBSTR(d, CASE SUBSTR(d, 6, 1) WHEN '/' THEN 7 ELSE 5 END), '/', '')||'-'|| --Year
SUBSTR('0'||REPLACE(SUBSTR(d, 3, CASE SUBSTR(d, 4, 1) WHEN '/' THEN 2 ELSE 3 END), '/', ''), -2)||'-'|| --Month
SUBSTR('0'||REPLACE(SUBSTR(d, 1, 2), '/', ''), -2) --Day
FROM (SELECT '11/11/2013' AS d);
答案 2 :(得分:0)
将日期转换为毫秒,然后使用
SELECT strftime("%Y-%m-%d", 1384108200000/1000 , 'unixepoch').
这是使用strftime的方法之一
答案 3 :(得分:0)
您可以转换日期格式
SimpleDateFormat sdfSource = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdfSource.parse(sourceDate);
SimpleDateFormat sdfDestination = new SimpleDateFormat("yyyy-MM-dd");
destinationDate = sdfDestination.format(date);
答案 4 :(得分:0)
如this answer中所述,您可以将日期转换为毫秒,然后使用:
String someDate = "1995-01-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(someDate);
System.out.println(date.getTime());
答案 5 :(得分:0)
答案可能不适用于Android - 通常情况下,如果原始日期看起来像mm/dd/yyyy
且所需格式为yyyy-mm-dd,则可以轻松更改每一行:
更新tableName set claimDate = substr(claimDate,7)|| ' - '|| substr(claimDate,1,2)|| ' - '|| SUBSTR(claimDate,4,2)强>
或只选择
选择substr(claimDate,7)|| ' - '|| substr(claimDate,1,2)|| ' - '||来自tableName的substr(claimDate,4,2)
claimDate
是tableName