在数据库中,日期类型属于最经常使用的类型之一。在很多场景中都会遇到日期类型转换问题,在关系型数据库中日期转换函数有很多,但这些数据库日期转换函数不能通用,接下来就以Oracle
、MySQL
、SQL Server
这3个常见的关系型数据库为例,简单介绍一下日期转换函数的使用。
这3个关系型数据库常见的日期转换函数有:Oracle
的TO_DATE
和TO_CHAR
,MySQL
、SQL Server
的convert
等函数。
Oralce日期转换
在Oracle
中,日期转换常用的函数是to_char
[1]和to_date
[2],一个可以将其日期转换为字符型,另一个可以将字符型转换为日期型。以下是他们的基本语法格式:
1 | TO_CHAR(expr, fmt[ ,nlsparam] ) -> varchar2 |
现在分别讲解一下这两个函数的用法:
1 | -- TO_CHAR() |
上面只是讲解了这两个函数最常见的一些用法,更详细的用法参见References[1]-[2]。
SQL SERVER日期转换
在SQL Server
中使用的日期转换函数是CONVERT
[3],其基本语法格式是:
1 | CONVERT( type [ (length) ], expression [ , style ] ) |
语法中length
是目标类型的长度,通过长度的设置可以截取我们所需要的格式,而通过style
的值实现不同格式的转换(具体使用见References[5])。
现在举例讲解一下CONVERT
函数在SQL Server
中的用法
1 | -- 日期转字符串 |
SQL Server
中CONVERT
函数已经能非常灵活的达到多种格式转换的目的,通过控制type_length
及style
的值能够获取我们想要的各种格式。
MySQL日期转换
在MySQL
中实现日期转换操作,可以通过CONVERT
[6]函数实现字符串转日期,通过DATE_FORMAT
[3]实现日期转字符串。
函数的基本语法格式:
1 | -- string_to_date |
下面举例解释一下这两个函数:
1 | -- CONVERT |
CONVERT
函数实现了将时间字符串转成TIME
、DATE
等类型,DATE_FORMAT
函数与Oracle
的TO_CHAR
用法非常类型,这里就不多做过多的赘述了。
CAST函数
其实CAST
函数不是一个只用于日期转换的函数,很多类型都可以通过这个函数进行类型转换,比如:字符串转数值型,日期转字符串等。以下是CAST
函数的语法知识:
1 | -- CAST Syntax: |
而且Oracle
[5]、MySQL
[6]、SQL Server
[4]都实现了对CAST
函数的支持。但是本文只讲该函数对日期类型转换的操作部分。
1 | -- Oracle |
总结
本文简单的介绍了一些常见的关系型数据库涉及日期转换的函数,其中大部分函数可移植性较差,是不能跨数据库使用的,这一点需要注意下。CAST
函数将日期类型转换为字符串类型,不能够灵活的格式化。对于函数使用的出处,参见参考文献中官方文档详细的解释。
References
[1] Oracle: TO_CHAR
[2] Oracle: TO_DATE
[3] MySQL8.0 Date and Time Functions: DATE_FORMAT