SQL中将字符串格式的24小时制时间转换为12小时制的方法
SQL将字符串型24小时制时间转换为12小时制格式
假设你的数据表中存储的时间是类似'0800'、'1430'这样的4位字符串(对应24小时制的时分),以下是不同SQL数据库的转换方案:
MySQL/MariaDB
先将字符串转换为数据库可识别的时间类型,再格式化为12小时制:
SELECT original_time, DATE_FORMAT(STR_TO_DATE(original_time, '%H%i'), '%h:%i %p') AS twelve_hour_time FROM your_table;
STR_TO_DATE(original_time, '%H%i'):把4位字符串按24小时制时分解析为时间类型DATE_FORMAT(..., '%h:%i %p'):将时间格式化为HH:MM AM/PM的12小时制格式,午夜'0000'会转为12:00 AM
SQL Server
先补全时间格式为HH:mm,再转换并格式化:
SELECT original_time, FORMAT(CONVERT(TIME, STUFF(original_time, 3, 0, ':')), 'hh:mm tt') AS twelve_hour_time FROM your_table;
STUFF(original_time, 3, 0, ':'):在4位字符串的第3位插入冒号,将'1430'转为'14:30'FORMAT(..., 'hh:mm tt'):将时间格式化为带AM/PM标识的12小时制格式
PostgreSQL
通过时间戳转换和格式化函数实现:
SELECT original_time, TO_CHAR(TO_TIMESTAMP(original_time, 'HH24MI'), 'HH12:MI AM') AS twelve_hour_time FROM your_table;
TO_TIMESTAMP(original_time, 'HH24MI'):按24小时制时分解析字符串为时间戳TO_CHAR(..., 'HH12:MI AM'):将时间戳格式化为12小时制,自动匹配AM/PM
注意事项
- 确保原字符串是4位有效时间值(范围
0000-2359),若存在无效值,可使用TRY_CONVERT(SQL Server)、TRY_CAST或CASE语句处理,避免转换报错 - 不同数据库的函数语法存在差异,请根据实际使用的数据库选择对应方案
内容的提问来源于stack exchange,提问作者Donatus
相关产品推荐
相关产品推荐

