Sqlite 您能否使用AM/PM将24小时时间字符串格式化为12小时时间字符串?

Sqlite 您能否使用AM/PM将24小时时间字符串格式化为12小时时间字符串?,sqlite,Sqlite,我在sqlite中以%H:%M字符串格式(例如“15:43”)存储了一些时间值,但我希望使用AM/PM指示器以12小时格式(例如“3:43 PM”)将它们格式化。sqlite是否可以实现这一点(如果可以,如何实现),或者我需要在我的应用程序代码中实现这一点?一些伪代码可以帮助您: if (hourpart of time >= 12) subtract 12 from hours append string " pm" else // hourpart < 12

我在sqlite中以%H:%M字符串格式(例如“15:43”)存储了一些时间值,但我希望使用AM/PM指示器以12小时格式(例如“3:43 PM”)将它们格式化。sqlite是否可以实现这一点(如果可以,如何实现),或者我需要在我的应用程序代码中实现这一点?

一些伪代码可以帮助您:

if (hourpart of time >= 12)
    subtract 12 from hours
    append string " pm"
else // hourpart < 12
    append string " am"
end if

我不能完全确定所有这些都是有效的SQLite语法,但您应该能够纠正错误。

在您的应用程序中这样做。以正常的24小时格式存储在数据库中。在数据库中,它可以存储为日期条目而不是字符串(如果我错了,请纠正我)

除非您使用自己的扩展sqlite,否则您必须这样做


sqlite的日期格式化函数只支持其C对应函数的一小部分,不足以解决您的问题。还缺少IF或CASE之类的选择构造,使得简单的IF/else变得不可能。

正如PoweRoy所建议的,这属于应用程序


建议在通信中存储的任何类型的数据都使用标准的、不区分区域设置的格式:

这里介绍了一些特殊情况。我使用“now”作为源,但您可以根据您的字符串对其进行调整:

select
  CASE 
  --For 00:05, for example.
  WHEN (strftime('%H', 'now', 'localtime') - 12) = -12
  THEN  '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'AM'
  --For 12:05, for example.
  WHEN (strftime('%H', 'now', 'localtime') - 12) = 0
  THEN '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'PM'
  --other am time
  WHEN (strftime('%H', 'now', 'localtime') - 12) < 0
  THEN  strftime('%H', 'now', 'localtime') ||':'||
    strftime('%M', 'now', 'localtime') ||' '|| 'AM'
  ELSE
  --other pm time
    (cast(strftime('%H', 'now', 'localtime') as integer) - 12) ||':'||
    strftime('%M', 'now', 'localtime') ||' '|| 'PM'
  END here_you_go_usa;
选择
案例
--例如,00:05。
当(strftime(“%H”、“now”、“localtime”)-12)=-12时
然后是“12:”|| strftime(“%M”,“now”,“localtime”)|“AM”
--比如12:05。
当(strftime(“%H”、“now”、“localtime”)-12)=0
然后是“12:”|| strftime(“%M”,“now”,“localtime”)| |“PM”
--其他上午时间
当(strftime(“%H”、“now”、“localtime”)-12)小于0时
然后strftime('%H','now','localtime')| |':'||
strftime(“%M”、“now”、“localtime”)| |“| |”AM”
其他的
--下午其他时间
(将strftime('%H','now','localtime')转换为整数)-12)| |':'||
strftime(“%M”、“now”、“localtime”)| |“| |”PM”
在这里结束你去美国;

这里有一个正在工作的..多亏了托马斯

SELECT 
    PatientName, 
    CASE WHEN 
        StrFTime('%H', AppointmentTime) % 12 = 0 THEN 12
        ELSE StrFTime('%H', AppointmentTime) % 12 END 
    || ':' ||
        StrFTime('%M', AppointmentTime)
    || ' ' ||
    CASE WHEN
        StrFTime('%H', AppointmentTime) > 12 THEN 'PM'
        ELSE 'AM' END   
    `APP_TIME`
From Patients;      
输出
阿卜杜勒·萨利姆,下午12:05

SELECT 
    PatientName, 
    CASE WHEN 
        StrFTime('%H', AppointmentTime) % 12 = 0 THEN 12
        ELSE StrFTime('%H', AppointmentTime) % 12 END 
    || ':' ||
        StrFTime('%M', AppointmentTime)
    || ' ' ||
    CASE WHEN
        StrFTime('%H', AppointmentTime) > 12 THEN 'PM'
        ELSE 'AM' END   
    `APP_TIME`
From Patients;