TOP > 色んな日付を求める

 

日付関連の処理って案外面倒なんですよねー。
っていうかすぐ忘れる!

ここにまとめておけ!

システム日付関連 SYSDATE関数

sysdate関数 サーバのシステム日付を取得する関数。

select sysdate from dual;

例)

sysdate

日付を元号で表示

元号用日付書式を使う。
(カレンダ設定:NLS_CALENDERをJapanese Imperialにして使用)

E (H,Sなどと表示)
EE (平成,昭和などと表示)

select to_char(sysdate, 'eyy/mm/dd', 'nls_calendar = ''Japanese Imperial''') from dual;
select to_char(sysdate, 'eeyy/mm/dd', 'nls_calendar = ''Japanese Imperial''') from dual;

元号で表示
元号で表示



日付書式

日付書式 WW : 指定日がその年の何週目か??

select to_char(to_date('20090323','yyyymmdd'),'ww' from dual


日付書式 DDD : 指定日がその年の何日目か??

select to_char(to_date('20090323','yyyymmdd'),'ddd' from dual


日付書式 d : 指定日が何曜日か?? 
日曜日を 1 とした数値を返す。

select to_char(to_date('20090323','yyyymmdd'),'d' from dual

曜日を返す

'dy' を使うとm「月」「火」と返す。



月の最終日を求める

last_day関数 指定した年月の月末日を取得する

select last_day(sysdate) from dual;

sysdate

 

誕生日から現在の年齢を取得する

months_between 関数 : 第1引数と第2引数との月数の差を求める。
これを利用して戻り値を12で割り小数を切り捨てすることで求める。うるう年対応有り。

サンプルテーブル(USER_INFO)定義
CREATE TABLE SCOTT.USERINFO (
ID CHAR(10) NOT NULL,  NAME VARCHAR2(20) NOT NULL,
BIRTHDAY CHAR(8) NOT NULL )

データの投入
*誕生日は文字型で作成しました。
INSERT INTO USERINFO (ID, NAME, BIRTHDAY) VALUES('00001 ','麻生太郎','19400920');
INSERT INTO USERINFO (ID, NAME, BIRTHDAY) VALUES('00002 ','福田康夫','19360716');
INSERT INTO USERINFO (ID, NAME, BIRTHDAY) VALUES('00003 ','安倍晋三','19540921');


select
name,
trunc(months_between(decode(to_char(sysdate,'mmdd'),'0229',
to_date(to_char(sysdate,'yyyy') || '0228','yyyymmdd'),sysdate),
decode(substr(birthday,5,4),'0229', to_date(substr(birthday,1,4) ||
'0228','yyyymmdd'),birthday)) / 12 ) from userinfo

今日現在の誕生日

 

(2009.03.23)