Sqlite 如何在sqllite中正确转换
当我在SQLLite中强制转换datetime时,它会截断字符串。 比如说Sqlite 如何在sqllite中正确转换,sqlite,Sqlite,当我在SQLLite中强制转换datetime时,它会截断字符串。 比如说 select cast("2017-04-23 9:12:08 PM" as datetime) as dt 返回 2017 我能想到的最接近的方法是: select date(datetime(strftime('%s','2017-04-23 09:12:08'), 'unixepoch')) 结果: 2017-04-23 SQLite无法识别您的日期格式: "2017-04-23 9:12:08 PM"
select cast("2017-04-23 9:12:08 PM" as datetime) as dt
返回
2017
我能想到的最接近的方法是:
select date(datetime(strftime('%s','2017-04-23 09:12:08'), 'unixepoch'))
结果:
2017-04-23
SQLite无法识别您的日期格式:
"2017-04-23 9:12:08 PM"
它不符合公认的时间字符串格式:
时间字符串可以采用以下任意格式:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD
SQLite的强制转换只能强制转换到定义的存储类,因此只能用于强制转换到 无blob、文本、实数、整数或数字 但是,确定列亲缘关系的常规规则应用于类型,因此通过将CASTvalue编码为datetime,可以有效地将CASTvalue用作NONE,即BLOB 因此,您不能有效地使用CAST。但是,您只需针对适当的值使用DateTime函数,可接受的格式如下:- 导致
2017-04-23 09:12:08
2017-04-23
或者显示日期操纵
select date(dt), dt FROM (
select datetime("2017-04-23 09:12:08") as dt
);
导致
2017-04-23 09:12:08
2017-04-23
及
但是,考虑到您的格式不是公认的格式之一,您可以转换该值。这更复杂,但可以做到。下面是一个示例,该示例将执行未经过实质性测试的转换:-
SELECT
CASE WHEN (CAST(hour AS INTEGER) + CAST(adjustment AS INTEGER)) > 9 THEN
datepart||' '||CAST(CAST(hour AS INTEGER) + CAST(adjustment AS INTEGER) AS TEXT)||':'||mins_and_secs
ELSE
datepart||' 0'||CAST(CAST(hour AS INTEGER) + CAST(adjustment AS INTEGER) AS TEXT)||':'||mins_and_secs
END AS converted
FROM (
SELECT substr(ts,1,10) as datepart,
CASE WHEN instr(ts,"PM") THEN 12 ELSE 0 END AS adjustment,
CASE WHEN length(ts) = 21 THEN substr(ts,12,1) ELSE substr(ts,12,2) END AS hour,
CASE WHEN length(ts) = 21 THEN substr(ts,14,5) ELSE substr(ts,15,5) END AS mins_and_secs
FROM (
select("2017-04-23 9:12:08 PM") as ts
)
);
这将导致2017-04-2321:12:08
使用select2017-04-23 9:12:08 AM在2017-04-23 09:12:08中显示结果
使用select2017-04-23 11:12:08 PM可在2017-04-23 23:12:08中显示结果
使用select2017-04-23 11:12:08 AM会在2017-04-23 11:12:08中产生结果,SQLite没有正式的日期时间类型。