我在 sqlite 中以 %H:%M 字符串格式存储一些时间值(例如“15:43”),但我想将它们格式化为带有 AM/PM 指示器的 12 小时格式(例如“3:下午 43 点”)。这可以用 sqlite 实现吗(如果可以,如何实现),还是我需要在我的应用程序代码中执行此操作?
一些伪代码可以帮助您:
if (hourpart of time >= 12)
subtract 12 from hours
append string " pm"
else // hourpart < 12
append string " am"
end if
在 SQL 中,您可以使用 CASE 语法来完成此操作。
仔细查看问题后:
SELECT (CASE HOUR(myTimeColumn) >= 12 WHEN 1 THEN
((HOUR(myTimeColumn) - 12) + '-' + MINUTE(myTimeColumn) + ' pm')
ELSE
(HOUR(myTimeColumn) + '-' + MINUTE(myTimeColumn) + ' am')
AS AmPmTime,
someOtherColumn
FROM myTable
我不完全确定所有这些都是有效的 SQLite 语法,但您应该能够纠正这些错误。
这里介绍了一些特殊情况。我使用“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;
在您的应用程序中执行此操作。以正常的 24 小时格式将其存储在数据库中。在数据库中,它可以存储为日期条目而不是字符串(如果我错了,请纠正我)
正如 PoweRoy 所推荐的,这属于应用程序。
建议在通信中存储或使用的任何类型的数据都使用标准的、区域设置不敏感的格式:http://www.mihai-nita.net/article.php?artID=20051025a
这是一个工作的..感谢托马斯
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
Abdul Salim 的答案只返回 PM,因为最后一个 CASE WHEN 末尾的一个小错误,找到了任何一个值。
SELECT
username,
sqlaction,
change_date,
CASE WHEN
StrFTime('%H', change_date) % 12 = 0 THEN 12
ELSE StrFTime('%H', change_date) % 12 END
|| ':' ||
StrFTime('%M', change_date)
|| ' ' ||
CASE WHEN
StrFTime('%H', change_date)-0 >= 12 THEN 'PM'
ELSE 'AM' END
as Time
From logs;
输出: