【问题标题】:Android sqlite time compare issueAndroid sqlite时间比较问题
【发布时间】:2017-04-14 07:39:40
【问题描述】:

我在 android sqlite 数据库中比较时间,这是屏幕截图中的表结构。实际上我有两个时间,比如字符串中的 8:00 和 7:30(基本上这些是员工轮班时间),我的数据库中有一个列 c_TIME 我想要所有位于我的两个中的记录从 c_TIME 开始的时间,即(8:00 和 7:30)。

我使用过这个查询,但它不起作用,请任何人指导我做错了什么

SELECT *
FROM ATTENDANCE
WHERE strftime('%H','08:00') > strftime('%H', c_TIME) AND
      time('08:00') < strftime('%H', c_TIME) AND
      STATE = 'IN' 

【问题讨论】:

  • 以上查询重新运行0条记录

标签: android sqlite datetime timestamp


【解决方案1】:

以下应该有效:

SELECT *
FROM ATTENDANCE
WHERE strftime('%H:%M:%S', c_date) > '07:30:00' AND
      strftime('%H:%M:%S', c_date) < '08:00:00' AND
      STATE = 'IN'

评论:

您应该使用c_date,而不是使用c_TIME 字段。实际上,我认为保留一个单独存储时间的列没有任何价值。

strftime 基于某种日期时间/时间戳输入返回一个字符串。 strftime('%H:%M:%S', c_date) 的输出应该具有HH:MM:SS 的形式,并且这个字符串 可以在字典上与08:00:0007:30:00 进行比较。比较应该仍然有效,因为对于相同长度的字符串,它仍然应该按数字排序。

【讨论】:

  • 这个返回0条记录
  • @Achin 你确定你有任何应该返回的数据吗?您问题中的同一张表没有匹配的数据。
  • 是的,我在 c_date 2016-11-30 09:18:19 、 2016-11-25 09:18:19 和 2016-11-26 06:30:00 中有 3 个值,这是谎言黑白“07:30:00”和“08:00:00”
  • 不,他们没有。 06:30 比您想要的范围,上午 9 点的时间比这个范围。请检查您的逻辑。
  • 实际上,我想我已经以 12 小时格式保存了我的时间,您的查询是否适用于 24 小时格式时间?
【解决方案2】:

试试:

select * from ATTENDANCE where c_date between 'yyyy-mm-dd' and 'yyyy-mm-dd';

不要使用 c_TIME,而是使用 c_date 字段。

您可以相应地更改查询中的日期格式以检索两个特定时间之间的数据。

Sqlite 支持以下格式:

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 

here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2012-03-09
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    相关资源
    最近更新 更多