sqlite-在MySQL中创建TIMEDIFF
我想在SQLite中调用一个hase efect函数,比如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…表示时间差,至少不
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公式。我会发布一个,但它相当复杂。