SQL常见函数整理之Format将日期、时间和数字值格式化

 更新时间:2024年01月12日 11:11:04   作者:@北海怪兽  
最近项目总是写sql查询时间,数据库存的时间有各种格式,下面这篇文章主要给大家介绍了关于SQL常见函数整理之Format将日期、时间和数字值格式化的相关资料,需要的朋友可以参考下

1. 用法

用于将日期、时间和数字值格式化为指定的字符串表示形式。

2. 基本语法

FORMAT(value, format)
  • value :要格式化的日期、时间或数字值。
  • format :指定要应用的格式的字符串。可以使用不同的格式代码来定义所需的格式,格式代码的具体取决于值的类型。

① 日期格式代码

  • yyyy:四位数的年份。
  • MM:两位数的月份,带前导零 (注意和分钟区分,分钟是小写的mm)
  • MMM:缩写的月份名称(例如:Jan、Feb)
  • dd:两位数的日期,带前导零
select
 format(cast('2024-01-01 10:35:14.277' as datetime), 'yyyy') as Year
,format(cast('2024-01-01 10:35:14.277' as datetime), 'MM'  ) AS Month
,format(cast('2024-01-01 10:35:14.277' as datetime), 'MMM' ) AS MonthAbbr
,format(cast('2024-01-01 10:35:14.277' as datetime), 'dd'  ) as day

查询结果如下图所示:

② 时间格式代码

  • hh:12 小时制的小时,带前导零(例如:01-12)
  • HH:24 小时制的小时,带前导零(例如:00-23)
  • mm:分钟,带前导零(例如:00-59)
  • ss:秒,带前导零(例如:00-59)
select
 format(cast('2024-01-01 19:05:09.277' as datetime), 'hh') as Hour_12h
,format(cast('2024-01-01 19:05:09.277' as datetime), 'HH'  ) AS Hour_24h
,format(cast('2024-01-01 19:05:09.277' as datetime), 'mm' ) AS Minute
,format(cast('2024-01-01 19:05:09.277' as datetime), 'ss'  ) as Second

查询结果如下图所示:

③ 数字格式代码

  • 0:数字占位符,若位数不足则用零填充
  • #,##0.00:用逗号分隔千位数,保留两位小数
--假设 某ID 固定长度是6位
SELECT FORMAT(1234, '000000') AS FormattedNumber;
--查询结果:  '001234'

select format(12345.6789,'#,##0.00')
--查询结果:   '12,345.68'

3. 应用示例

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') AS FormattedDate;
-- 输出:"2023-10-18"

SELECT FORMAT(GETDATE(), 'hh:mm:ss tt') AS FormattedTime;
-- 输出:02:28:30 PM

SELECT FORMAT(1234567.89, '#,##0.00') AS FormattedNumber;
-- 输出:"1,234,567.89"

注意事项:

1. 格式代码注意区分大小写

2. FORMAT() 函数在日期、时间和数字格式化方面非常强大,但它也可能会影响查询性能。在处理大量数据时,建议使用其他更高效的方法来格式化数据,比如在应用层或报表工具中进行格式化。

附:日期计算

在表的实际计算中,常需要计算距离某个日期或现在日期往前或往后某段时间的日期。

-- 加(Mysql)
select date_add(now(),interval 1 day);
-- year:年,quarter:季,month:月,week:周,day:天,hour:小时,minuter:分钟,second:秒,microsecond:毫秒
-- 加(sql server)
select dateadd(day,n,'2023-06-20')
-- 加(Hive)
select date_add(current_timestamp(),1) -- 加一天
select add_months('2022-07-16', n) -- Hive加n个月份
select date_format(date_sub(current_timestamp(),1),'yyyy-MM-dd') --指定前一天日期
select from_unixtime((unix_timestamp()-86400),'yyyy-MM') --指定前一天日期
-- Gbase指定前一天日期
select subdate(current_date,interval 1 day) 
-- 减
select date_sub(now(),interval 1 month);
select date_sub(date_format(current_timestamp(),'yyyy-MM-dd'),1) 
select date_sub(current_timestamp(),14) -- Hive指定前一天日期
-- 计算日期间隔
select datediff('2023-6-16','2023-6-1') -- mysql,Hive计算两个日期之间的间隔(相差天数)
select datediff('d','2023-6-1','2023-6-16 12:20:00') --sql server计算两个日期之间间隔天数
select months_between('2023-09-22','2022-07-16') -- Hive计算两个日期之间的间隔
select timediff('12:00:00', '11:30:00') -- 两个时间间隔
select timestampdiff(month,date_sub(now(),interval 60 day),now()); -- 相差月
-- timestampdiff第一个参数定义返回计算的结果。year:年,quarter:季,month:月,week:周,day:天,hour:小时,minuter:分钟,second:秒,microsecond:毫秒
-- timestampdiff减去的日期带有时间,会认为是下一天(2023-07-20 08:00:00会按照2023-07-21计算);datediff会直接截取时间(2023-07-20 18:00:00也会按照2023-07-20计算)
select timestampdiff(day,'2023-07-13',current_date()) -- timestampdiff可以实现各种字符串(例如2023-07-13,20230703)日期的加减

-- 当月的第一天
select STR_TO_DATE(CONCAT(DATE_FORMAT(now(),'%Y-%m'), '-01'), '%Y-%m-%d')
-- sql server返回当月1号
select CONVERT(varchar(10),DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0),120)
-- 当月最后一天
select DATE_ADD(STR_TO_DATE(CONCAT(DATE_FORMAT(DATE_ADD(now(),INTERVAL 1 MONTH),'%Y-%m'), '-01'), '%Y-%m-%d'),INTERVAL -1 DAY); 

总结

到此这篇关于SQL常见函数整理之Format将日期、时间和数字值格式化的文章就介绍到这了,更多相关SQL Format日期时间和数字值格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql5.7服务无法启动的图文解决教程

    Mysql5.7服务无法启动的图文解决教程

    这篇文章主要介绍了Mysql5.7服务无法启动问题,解决办法非常简单,需要的的朋友参考下
    2017-02-02
  • MySql增量恢复的几种实现方法

    MySql增量恢复的几种实现方法

    本文主要介绍了MySql增量恢复的几种实现方法,通过增量备份与恢复,可以在系统发生故障或数据损坏时快速恢复到最新状态,提高系统的可靠性和可用性,感兴趣的可以了解一下
    2023-08-08
  • mysql常见的错误提示问题处理小结

    mysql常见的错误提示问题处理小结

    本文总结了在使用mysql过程中经常遇到的3种错误提示(error1067,error1061,error1045)的问题的处理方法,都是本人在实际应用中处理检验过的,希望对大家有所帮助
    2014-08-08
  • MySQL5.7.21安装与密码图文配置教程

    MySQL5.7.21安装与密码图文配置教程

    这篇文章主要为大家详细介绍了MySQL5.7.21安装与密码图文配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • MySQL5.7.21解压版安装详细教程图解

    MySQL5.7.21解压版安装详细教程图解

    对于小编来说安装系统软件是常干的事情,今天小编抽空给大家整理了MySQL5.7.21解压版安装详细教程图解,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-09-09
  • 一文了解MySQL的四大子查询

    一文了解MySQL的四大子查询

    本文主要介绍了一文了解MySQL的四大子查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Mysql中的join操作

    Mysql中的join操作

    这篇文章主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下
    2017-05-05
  • 深入分析Mysql中limit的用法

    深入分析Mysql中limit的用法

    很久没用mysql的limit,一时大意竟然用错了,自认为(limit 开始,结束),其实错了,正确的应该是(limit 偏移量,条数),为了记住这次错误,转载一篇limit用法详解。推荐给大家,希望对大家能够有所帮助。
    2015-03-03
  • MySQL语句汇总整理

    MySQL语句汇总整理

    这篇文章主要给大家分享的是MySQL语句汇总整理,围绕MySQL语句的相关资料对其进行整理,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12
  • 构建双vip的高可用MySQL集群

    构建双vip的高可用MySQL集群

    大家好,本篇文章主要讲的是构建双vip的高可用MySQL集群,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论