You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL中将'2016-06-10 09:30:04.000'转换为'06/10/2016 9:30 AM'

不同SQL数据库的时间格式转换方案

刚好处理过类似的需求,不同SQL数据库的日期格式化函数各有不同,我给你列几个主流数据库的实现方法,直接就能套用:

SQL Server 实现

你可以用FORMAT函数(SQL Server 2012及以上版本支持),语法简洁直观:

SELECT FORMAT(CAST('2016-06-10 09:30:04.000' AS DATETIME), 'MM/dd/yyyy h:mm tt') AS FormattedTime;

如果你的版本不支持FORMAT,可以用CONVERT结合字符串拼接来实现:

SELECT 
    CONVERT(VARCHAR, CAST('2016-06-10 09:30:04.000' AS DATETIME), 101) + ' ' +
    LTRIM(RIGHT(CONVERT(VARCHAR, CAST('2016-06-10 09:30:04.000' AS DATETIME), 100), 7)) 
    AS FormattedTime;
  • 101格式码对应MM/dd/yyyy的日期格式
  • 100格式码会返回Mon dd yyyy hh:miAM,取右边7位就能得到带AM/PM的时间部分,再用LTRIM去掉前导空格

MySQL 实现

DATE_FORMAT函数就能直接完成转换:

SELECT DATE_FORMAT('2016-06-10 09:30:04.000', '%m/%d/%Y %l:%i %p') AS FormattedTime;

格式符说明:

  • %m:两位数字的月份(01-12)
  • %d:两位数字的日期(01-31)
  • %Y:四位数字的年份
  • %l:12小时制的小时(不带前导零,1-12)
  • %i:两位数字的分钟(00-59)
  • %p:显示AM或PM(大写)

Oracle 实现

通过TO_CHAR函数配合日期格式模型实现:

SELECT TO_CHAR(TO_DATE('2016-06-10 09:30:04.000', 'YYYY-MM-DD HH24:MI:SS.FF3'), 'MM/DD/YYYY HH:MI AM') AS FormattedTime FROM DUAL;
  • 先通过TO_DATE把字符串转成Oracle的日期类型(如果字段本身是日期类型,这一步可以省略)
  • MM/DD/YYYY对应目标日期格式,HH:MI AM对应12小时制的时间和上午/下午标识

注意事项

  • 如果你的时间数据本身是日期/时间类型(不是字符串),可以直接替换示例中的字符串为字段名,不需要额外转换
  • 部分数据库对格式符的大小写敏感,比如Oracle的AM如果写成am会显示小写的上午/下午标识

内容的提问来源于stack exchange,提问作者Muthukrishnan Kandasamy

火山引擎 最新活动