在数据库中,日期类型属于最经常使用的类型之一。在很多场景中都会遇到日期类型转换问题,在关系型数据库中日期转换函数有很多,但这些数据库日期转换函数不能通用,接下来就以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