計算一個日期是星期幾在日常生活中山非常有用的,比如如果安排的報到日期是週末那麼就像後拖延報道日期,在主流的數據庫中對這個功能都提供了很好的支持。
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