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日期时间和数字值格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论