SQL 从给定日期值里提取年月日时分秒,把当前日期值分解为六个部分:年、月、日、时、分和秒,并且希望结果以数字的形式返回。
SQL 从给定日期值里提取年月日时分秒 问题描述
把当前日期值分解为六个部分:年、月、日、时、分和秒,并且希望结果以数字的形式返回。
SQL 从给定日期值里提取年月日时分秒 解决方案
这里以当前日期为例。但是,本实例适用于任何其他日期值。在第 1 章,我提到过学习和利用数据库内置函数的重要性。对于日期处理而言,这一点尤其重要。除了本实例提供的做法,还有其他方式能够从给定日期值里提取年、月、日、时、分、秒等时间单位。总之,多尝试不同的做法和技巧是非常有益的。
DB2
DB2 实现了一组内置函数帮助我们方便地提取出一个日期值的每一个组成部分。这些函数分别被命名为 HOUR
、MINUTE
、SECOND
、DAY
、MONTH
和 YEAR
,直观地表明它们要返回的时间单位。如果我们想要“天”,那就调用 DAY
函数;如果想要“小时”,那就调用 HOUR
函数,等等。示例如下。
1 select hour( current_timestamp ) hr,
2 minute( current_timestamp ) min,
3 second( current_timestamp ) sec,
4 day( current_timestamp ) dy,
5 month( current_timestamp ) mth,
6 year( current_timestamp ) yr
7 from t1
HR MIN SEC DY MTH YR
---- ----- ----- ----- ----- -----
20 28 36 15 6 2005
Oracle
使用 TO_CHAR
和 TO_NUMBER
函数从一个日期值里提取各种时间单位。
1 select to_number(to_char(sysdate,'hh24')) hour,
2 to_number(to_char(sysdate,'mi')) min,
3 to_number(to_char(sysdate,'ss')) sec,
4 to_number(to_char(sysdate,'dd')) day,
5 to_number(to_char(sysdate,'mm')) mth,
6 to_number(to_char(sysdate,'yyyy')) year
7 from dual
HOUR MIN SEC DY MTH YEAR
---- ----- ----- ----- ----- -----
20 28 36 15 6 2005
PostgreSQL
使用 TO_CHAR
和 TO_NUMBER
函数从一个日期值里提取各种时间单位。
1 select to_number(to_char(current_timestamp,'hh24'),'99') as hr,
2 to_number(to_char(current_timestamp,'mi'),'99') as min,
3 to_number(to_char(current_timestamp,'ss'),'99') as sec,
4 to_number(to_char(current_timestamp,'dd'),'99') as day,
5 to_number(to_char(current_timestamp,'mm'),'99') as mth,
6 to_number(to_char(current_timestamp,'yyyy'),'9999') as yr
7 from t1
HR MIN SEC DY MTH YR
---- ----- ----- ----- ----- -----
20 28 36 15 6 2005
MySQL
使用 DATE_FORMAT
函数从一个日期值里提取各种时间单位。
1 select date_format(current_timestamp,'%k') hr,
2 date_format(current_timestamp,'%i') min,
3 date_format(current_timestamp,'%s') sec,
4 date_format(current_timestamp,'%d') dy,
5 date_format(current_timestamp,'%m') mon,
6 date_format(current_timestamp,'%Y') yr
7 from t1
HR MIN SEC DY MTH YR
---- ----- ----- ----- ----- -----
20 28 36 15 6 2005
SQL Server
使用 DATEPART
函数从一个日期值里提取各种时间单位。
1 select datepart( hour, getdate()) hr,
2 datepart( minute,getdate()) min,
3 datepart( second,getdate()) sec,
4 datepart( day, getdate()) dy,
5 datepart( month, getdate()) mon,
6 datepart( year, getdate()) yr
7 from t1
HR MIN SEC DY MTH YR
---- ----- ----- ----- ----- -----
20 28 36 15 6 2005
SQL 从给定日期值里提取年月日时分秒 扩展知识讨论
以上这些解决方案并没有什么特别之处,只是尽量利用了数据库中的内置函数。我们应该花一些时间去学习这些与日期相关的函数。不过,本实例的各个解决方案仅仅展示了这些函数的部分功能。如果仔细研究的话,我们会看到每一个函数都能接受更多的参数,并能返回更多信息,只是我们无法在本实例里一一演示给你看。