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;
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;
7条答案
按热度按时间goqiplq21#
这是一个工作的...谢谢托马斯
字符串
输出
Abdul Salim,12:05 PM
a0zr77ik2#
Abdul Salim的答案只返回PM,无论找到哪个值,因为在最后一个CASE WHEN结束时有一个小错误。
字符串
输出值:
| 用户名|SQLACTION|变更日期|时间|
| --|--|--|--|
| 特科托|更新|2023-09-15 11:37:21|上午11:37|
| 小跑|更新|2023-09-15 11:57:57|上午11时57|
| 特科托|插入|2023-09-18 11:24:59|上午11:24|
| 特科托|插入|2023-09-18 11:25:05|上午11时25|
| 特科托|更新|2023-09-18 16:34:51|下午4点34分|
| 托托|更新|2023-09-18 16:43:56| 4:43下午|
| 特科托|更新|2023-09-18 16:45:50|下午4点45|
| 特科托|更新|2023-09-18 17:17:22|下午5点17分|
igsr9ssn3#
除非你用你自己的custom function扩展sqlite,否则你必须用代码来做这件事。
sqlite的strftime日期格式化函数只支持其C对应函数的一小部分,不足以解决您的问题。sqlite还缺乏IF或CASE等选择结构,使得简单的if/else无法实现。
mec1mxoz4#
一些伪代码可以帮助你:
字符串
在SQL中,你可以使用CASE语法来实现这一点。
在仔细研究了这个问题之后:
型
我不完全确定所有这些都是有效的SQLite语法,但您应该能够纠正错误。
aydmsdu95#
这里涉及到一些特殊情况。我使用'now'作为源代码,但你可以根据你的字符串调整它:
字符串
velaa5lx6#
在你的应用程序中这样做。在数据库中以正常的24小时格式存储它。在数据库中,它可以存储为日期条目而不是字符串(如果我错了,请纠正我)
tkclm6bt7#
正如PoweRoy建议的那样,这属于应用程序。
建议在通信中存储或使用的任何类型的数据都使用标准的、不区分区域设置的格式:http://www.mihai-nita.net/article.php?artID=20051025a