【问题标题】:How to order by date/time with AM/PM in SQLITE如何在 SQLITE 中使用 AM/PM 按日期/时间排序
【发布时间】:2017-06-15 03:17:37
【问题描述】:

我的日期格式是:“yyyy-MM-dd”(2017-03-23)

我的时间格式是:“hh:mm a”(晚上 10:15)

如果在 MYSQL 中,您可以执行此操作以使用 am/pm 转换时间:

SELECT * FROM table_name ORDER BY STR_TO_DATE(timeField,'%h.%i%p');

如何在 SQLITE 中执行此操作?

我试过了,但没有用:

SELECT appointment_date, start_time FROM appointment order by appointment_date, DATE(start_time, '%h:%i %p')

结果: Image Link

假设 AM 应该比 PM 优先,因为默认是 ASC,我也尝试使用 DESC,但它没有正确排列结果。

【问题讨论】:

  • 您应该将该约会时间存储为 date-with-time 值。或者,如果时间是分开的,它应该是 24 小时格式。

标签: ios sql sqlite datetime swift3


【解决方案1】:

您似乎将start_time() 值存储在字符串中。

你可以这样做:

order by appointment_date,
         (case when start_time like '% am' then 1 else 2 end),
         start_time

SQLite 并不真正支持日期/时间格式的 am/pm。但是,这很容易通过like 完成。

【讨论】:

  • 这可行,但是当时间是下午 12:30 和下午 1:30 时会出现问题。在这种情况下,下午 1:30 将首先出现,另外一秒钟,因为它也比较数字和这里 1:3012:30PM。
【解决方案2】:

更好的解决方案是将您的时间以 24 小时格式存储在另一列中,并且该列的类型应为 DATETIME 而不是 varchar。

您可以使用以下方式转换您的时间:

        SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
        SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mma");
        Date date=new Date();
        try {
            date = parseFormat.parse(AmPmTimeFormatColumn);
        }catch (Exception e){}
        values.put("24HourFormatColumn", displayFormat.format(date));

然后这样排序:

select * from table_name order by DATETIME(24HourFormatColumn);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多