计算一个日期是星期几在日常生活中山非常有用的,比如如果安排的报到日期是周末那么就像后拖延报道日期,在主流的数据库中对这个功能都提供了很好的支持。
1. MySQL
MySQL 中提供的DATENAME()函数用于计算一个日期是星期几,比如下面的SQL语句用于计算出生日期和注册日期各式星期几:
SELECT FBirthday, DAYNAME(FBirthday), FRegDay, DAYNAME(FRegDay) FROM T_Person
2. Oracle
Oracle提供的TO_CHAR()函数用于将数据库转化为字符串类型,当针对时间日期类型数据进行转化你的时候,它接受两个参数,其参数格式如下:
TO_CHAR(date, format)
其中date为带转换的日期,参数format为格式化字符串,数据库系统将按照这个字符串对date进行转换。格式化字符串中可以采用如下的占位符:
可以简单地将占位符作为参数传给TO_CHAR()函数,下面的SQL语句用于计算出生日期的年份、月份及周数:
占位符 | 说明 |
YEAR | 年份,比如 NINETEEN NINETY-EIGHT |
YYYY | 4位年份,比如 1998 |
YYY | 年份后 3位,比如 998 |
YY | 年份后 2位,比如 98 |
Y | 年份后 1位,比如 8 |
IYYY | 符合 ISO标准的 4位年份,比如 1998 |
IYY | 符合 ISO标准的年份后 3位,比如 998 |
IY | 符合 ISO标准的年份后 2位,比如 98 |
I | 符合 ISO标准的年份后 1位,比如 8 |
Q | 以整数表季度度,比如 1 |
MM | 以整数表示月份,比如 01 |
MON | 月份的名称,比如 Feb |
MONTH | 月份的名称,补足 9个字符 |
RM | 罗马表示法的月份,比如 VIII |
WW | 日期属于当年的第几周,比如 30 |
W | 日期属于当月的第几周,比如 2 |
IW | 日期属于当年的第几周(按 ISO标准),比如 30 |
D | 日期属于周几,以整数表示,返回值返回值为 1~ 7 |
DAY | 日期属于周几,以名字的形式表示 ,比如 FRI |
DD | 日期属于当月的第几天,比如 2 |
DDD | 日期属于当年的第几天,比如 168 |
DY | 日期属于周几,以名字形式表示,比如 FRI |
HH | 小时部分( 12小时制) |
HH12 | 小时部分( 12小时制) |
HH24 | 小时部分( 24小时制) |
MI | 分钟部分 |
SS | 秒部分 |
SSSSS | 自从午夜开始的秒数 |
SELECT FBirthday, TO_CHAR(FBirthday, 'YYYY') as yyyy,
TO_CHAR(FBirthday, 'MM') as mm,
TO_CHAR(FBirthday, 'MON') as mon,
TO_CHAR(FBirthday, 'WW') as ww
FROM T_Person
同样还可以将占位符组合起来实现更加复杂的转换逻辑,比如下面的SQL语句用于以“2008-08-08”这样的形式显示出生日期,以及以“31-2007-02”形式显示注册的日期:
SELECT FBirthday,
TO_CHAR(FBirthday, 'YYYY-MM-DD') as yyymmdd,
TO_CHAR(FRegDay, 'DD-YYYY-MM') as ddyyyymm
FROM T_Person
我们前面提到了,当用“DAY”作为参数的时候就可以哦将日期格式化为名字的形式表示星期几,比如下面的SQL语句用于出生日期及注册日期各属于星期几:
SELECT
FBirthday, TO_CHAR(FBirthday, 'DAY') as birthwk,
FRegDay, TO_CHAR(FRegDay, 'DAY') as regwk,
FROM T_Person