Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 如何在sqllite中正确转换_Sqlite - Fatal编程技术网

Sqlite 如何在sqllite中正确转换

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"

当我在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"
它不符合公认的时间字符串格式:

时间字符串可以采用以下任意格式:

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没有正式的日期时间类型。