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-在MySQL中创建TIMEDIFF_Sqlite_Timedelta - Fatal编程技术网

sqlite-在MySQL中创建TIMEDIFF

sqlite-在MySQL中创建TIMEDIFF,sqlite,timedelta,Sqlite,Timedelta,我想在SQLite中调用一个hase efect函数,比如MySQL中的TIMEDIFF 我做了这个: select strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56') 但这只是秒数。因此,我如何制作一个str,如%Y-%m-%d%H:%m:%S,其中%H:%m:%S是小时、分和秒的差,当它大于24小时时,%d将显示它有多少dais,以此类推%Y和%m你不能用%Y-%m-%d…表示时间差,至少不

我想在SQLite中调用一个hase efect函数,比如MySQL中的TIMEDIFF

我做了这个:

select strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56')

但这只是秒数。因此,我如何制作一个str,如
%Y-%m-%d%H:%m:%S
,其中
%H:%m:%S
是小时、分和秒的差,当它大于24小时时,
%d
将显示它有多少dais,以此类推
%Y
%m
你不能用
%Y-%m-%d…
表示时间差,至少不是作为日期格式。你如何表达不到一天的差异?(
0000-00-00…
不是有效日期)。还有,一个月是多少?30天?31天?23432天

我建议你把你的差异保持在几秒钟之内,当你展示它的时候,根据需要调整它

另一方面,如果你真的想按照你的要求去做,这里有一个方法:

sqlite> select datetime(strftime('%s','2012-01-01 12:00:00') 
               - strftime('%s','2004-01-01 02:34:56') - 62167305600, 'unixepoch');
0007-12-31 09:25:04
即使我觉得OP的否决票是不合理的,我也无法阻止自己解释为什么我上面提到的显然不是一个很好的选项返回“不正确”结果当时差小于1天时:我在上面写的内容中暗示了原因:没有
0000-00-00…
这样的日期,因此返回的日期时间处于负区域:
-001-12-31…

这里有一种获取
438:53:45
的方法,但它非常复杂:

earlier date: d1
later date: d2

select 
    cast(
        (strftime('%s', d2) - strftime('%s', d1)) / 86400 * 24 
             + cast(strftime("%H", time(strftime('%s', d2) 
                    - strftime('%s', d1), 'unixepoch')) 
               as int) 
    as text) 
    || ":" 
    ||  substr(time(strftime('%s', d2) - strftime('%s', d1), 'unixepoch'), 4);
例如:

d1 = '2004-01-01 02:34:56'
d2 = '2012-01-01 12:00:00'

sqlite> select cast((strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56')) / 86400 *24 + cast(strftime("%H", time(strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56'), 'unixepoch'))  as int) as text) 
    || ":" 
    ||  substr(time(strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56'), 'unixepoch'), 4);
70137:25:04

您不能用
%Y-%m-%d…
表示时差,至少不能用日期格式表示。你如何表达不到一天的差异?(
0000-00-00…
不是有效日期)。还有,一个月是多少?30天?31天?23432天

我建议你把你的差异保持在几秒钟之内,当你展示它的时候,根据需要调整它

另一方面,如果你真的想按照你的要求去做,这里有一个方法:

sqlite> select datetime(strftime('%s','2012-01-01 12:00:00') 
               - strftime('%s','2004-01-01 02:34:56') - 62167305600, 'unixepoch');
0007-12-31 09:25:04
即使我觉得OP的否决票是不合理的,我也无法阻止自己解释为什么我上面提到的显然不是一个很好的选项返回“不正确”结果当时差小于1天时:我在上面写的内容中暗示了原因:没有
0000-00-00…
这样的日期,因此返回的日期时间处于负区域:
-001-12-31…

这里有一种获取
438:53:45
的方法,但它非常复杂:

earlier date: d1
later date: d2

select 
    cast(
        (strftime('%s', d2) - strftime('%s', d1)) / 86400 * 24 
             + cast(strftime("%H", time(strftime('%s', d2) 
                    - strftime('%s', d1), 'unixepoch')) 
               as int) 
    as text) 
    || ":" 
    ||  substr(time(strftime('%s', d2) - strftime('%s', d1), 'unixepoch'), 4);
例如:

d1 = '2004-01-01 02:34:56'
d2 = '2012-01-01 12:00:00'

sqlite> select cast((strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56')) / 86400 *24 + cast(strftime("%H", time(strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56'), 'unixepoch'))  as int) as text) 
    || ":" 
    ||  substr(time(strftime('%s','2012-01-01 12:00:00') - strftime('%s','2004-01-01 02:34:56'), 'unixepoch'), 4);
70137:25:04

选择日期时间(strftime('%s','2004-01-01 12:00:00')-strftime('%s','2004-01-01 02:34:56')-62167305600,'unixepoch')不好
返回
-001-12-31 09:25:04
。但是我怎样才能得到MySQL中的输出,比如说select timediff(now(),'2012-07-01 12:00:00')
->
'438:53:45
?好吧,那么你不应该期望我在这个()上有更多的输入,我理解,所以我必须编辑select的结果。感谢您获得
438:53:45
您将需要一个更复杂的sqlite公式。我将发布一个,但它非常复杂。它不好
select datetime(strftime(“%s”,“2004-01-01 12:00:00”)-strftime(“%s”,“2004-01-01 02:34:56”)-62167305600,“unixepoch”)返回
-001-12-31 09:25:04
。但是我怎样才能得到MySQL中的输出,比如说select timediff(now(),'2012-07-01 12:00:00')
->
'438:53:45
?好吧,那么你不应该期望我在这个()上有更多的输入,我理解,所以我必须编辑select的结果。感谢您获得
438:53:45
您将需要一个更复杂的sqlite公式。我会发布一个,但它相当复杂。