1
--
--------------------------------------------------------------------------
2
--
----------oracle time ------------
3
--
---------------------------------------------------------------------------
4
/*
5
Year:
6
yy two digits 兩位年 顯示值:12
7
yyy three digits 三位年 顯示值:012
8
yyyy four digits 四位年 顯示值:2012
9
10
Month:
11
mm number 兩位月 顯示值:12
12
mon abbreviated 字符集表示 顯示值:12月,若是英文版,顯示
13
month spelled out 字符集表示 顯示值:12月,若是英文版,顯示
14
15
Day:
16
dd number 當月第幾天 顯示值:
17
ddd number 當年第幾天 顯示值:
18
dy abbreviated 當周第幾天簡寫 顯示值:,若是英文版,顯示
19
day spelled out 當周第幾天全寫 顯示值:,若是英文版,顯示
20
ddspth spelled out, ordinal twelfth
21
22
Hour:
23
hh two digits 12小時進制 顯示值:
24
hh24 two digits 24小時進制 顯示值:
25
26
Minute:
27
mi two digits 60進制 顯示值:
28
29
Second:
30
ss two digits 60進制 顯示值:
31
32
其它:
33
Q digit 季度 顯示值:
34
WW digit 當年第幾周 顯示值:
35
W digit 當月第幾周 顯示值:
36
37
24小時格式下時間范圍為: 0:00:00 - 23:59:59....
38
12小時格式下時間范圍為: 1:00:00 - 12:59:59 ....
39
*/
40
--
1.得到當前時間
41
--
英文:
42
SELECT
TO_CHAR(sysdate,
43
'
MM/DD/YYYY HH:MI AM
'
,
44
'
NLS_DATE_LANGUAGE = American
'
)
45
FROM
DUAL
46
--
日文:
47
SELECT
TO_CHAR(sysdate,
48
'
MM/DD/YYYY HH:MI AM
'
,
49
'
NLS_DATE_LANGUAGE = Japanese
'
)
50
FROM
DUAL
51
--
中文:(特別注意NLS_DATE_LANGUAGE多個單引號)
52
SELECT
TO_CHAR(sysdate,
53
'
MM/DD/YYYY HH:MI AM
'
,
54
'
NLS_DATE_LANGUAGE =
''
SIMPLIFIED CHINESE
'''
)
55
FROM
DUAL
56
57
--
得到系統時間
58
select
to_char(sysdate,
'
yyyy-mm-dd hh24:mi:ss
'
)
as
nowTime
from
dual;
59
--
獲取時間的年
60
select
to_char(sysdate,
'
yyyy
'
)
as
nowYear
from
dual;
61
--
獲取時間的月
62
select
to_char(sysdate,
'
mm
'
)
as
nowMonth
from
dual;
63
--
獲取時間的日
64
select
to_char(sysdate,
'
dd
'
)
as
nowDay
from
dual;
65
--
獲取時間的時
66
select
to_char(sysdate,
'
hh24
'
)
as
nowHour
from
dual;
67
--
獲取時間的分
68
select
to_char(sysdate,
'
mi
'
)
as
nowMinute
from
dual;
69
--
獲取時間的秒
70
select
to_char(sysdate,
'
ss
'
)
as
nowSecond
from
dual;
71
--
2.顯示成英文字符
72
--
顯示成文英文數字
73
select
to_char( to_date(
2012
,
'
J
'
),
'
Jsp
'
)
from
dual;
74
--
結果為: Two Thousand Twelve
75
SELECT
to_char(to_date(
12
,
'
J
'
),
'
Jsp
'
)
FROM
dual;
76
--
3.求某天是星期幾
77
select
to_char(to_date(
'
2012-12-26
'
,
'
yyyy-mm-dd
'
),
'
day
'
)
DAY
from
dual;
78
--
顯示為星期三
79
SELECT
to_char(to_date(
'
2012-12-26
'
,
'
yyyy-mm-dd
'
),
'
day
'
,
'
NLS_DATE_LANGUAGE = American
'
)
DAY
FROM
dual;
80
--
顯示為wednesday
81
--
更改顯示語言為american
82
ALTER
SESSION
SET
NLS_DATE_LANGUAGE
=
'
AMERICAN
'
;
83
--
設置為簡體中文
84
ALTER
SESSION
SET
NLS_DATE_LANGUAGE
=
'
SIMPLIFIED CHINESE
'
;
85
86
--
4.求兩個日期間的天數
87
SELECT
FLOOR
(SYSDATE
-
to_date(
'
20121201
'
,
'
yyyymmdd
'
))
FROM
dual;
88
89
--
5. 時間為null的用法
90
CREATE
TABLE
tTime
91
( ID
NUMBER
,
92
TIME DATE
93
);
94
INSERT
INTO
tTime(ID,TIME)
VALUES
(
1
,to_date(
'
2012-12-12
'
,
'
yyyy-mm-dd
'
));
95
INSERT
INTO
tTime(ID)
VALUES
(
2
);
96
SELECT
*
FROM
tTime;
97
98
CREATE
TABLE
nTime
AS
SELECT
*
FROM
tTime;
99
SELECT
*
FROM
nTIme;
100
101
select
ID, TIME
from
tTime
102
UNION
103
SELECT
ID ,TO_DATE(
null
)
from
nTime;
104
105
--
6. 日期格式沖突問題
106
--
輸入的格式要看你安裝的ORACLE字符集的類型, 比如: US7ASCII, date格式的類型就是: '01-Jan-01'
107
alter
system
set
NLS_DATE_LANGUAGE
=
American;
108
alter
session
set
NLS_DATE_LANGUAGE
=
American;
109
--
或者在to_date中寫
110
select
to_char(to_date(
'
2012-12-26
'
,
'
yyyy-mm-dd
'
),
'
day
'
,
'
NLS_DATE_LANGUAGE = American
'
)
from
dual;
111
--
注意我這只是舉了NLS_DATE_LANGUAGE,當然還有很多,
112
--
可查看
113
select
*
from
nls_session_parameters;
114
select
*
from
V$NLS_PARAMETERS;
115
116
--
7.查找除去某些天的天數之和
117
select
count
(
*
)
118
from
(
select
rownum
-
1
rnum
119
from
all_objects
120
where
rownum
<=
to_date(
'
2013-01-01
'
,
'
yyyy-mm-dd
'
)
-
to_date(
'
2012-
121
01-01
'
,
'
yyyy-mm-dd
'
)
+
1
122
)
123
where
to_char( to_date(
'
2012-01-01
'
,
'
yyyy-mm-dd
'
)
+
rnum
-
1
,
'
D
'
)
124
not
in
(
'
1
'
,
'
7
'
)
125
126
--
查找2012-01-01至2013-01-01間除星期一和七的天數
127
--
在前后分別調用DBMS_UTILITY.GET_TIME, 讓后將結果相減(得到的是1/100秒, 而不是毫秒).
128
--
8. 查找月份
129
select
months_between(to_date(
'
01-31-2013
'
,
'
MM-DD-YYYY
'
),to_date(
'
12-31-2012
'
,
'
MM-DD-YYYY
'
)) "MONTHS"
FROM
DUAL;
130
131
select
months_between(to_date(
'
02-01-2013
'
,
'
MM-DD-YYYY
'
),to_date(
'
12-31-2012
'
,
'
MM-DD-YYYY
'
)) "MONTHS"
FROM
DUAL;
132
133
--
9.顯示時間
134
select
to_char(sysdate,
'
hh:mi:ss
'
) TIME
from
all_objects;
135
--
函數實現
136
create
or
replace
function
sys_date
return
date
is
137
begin
138
return
sysdate;
139
end
;
140
select
to_char(sys_date,
'
hh:mi:ss
'
)
from
all_objects;
141
142
--
10.獲得小時數
143
--
extract()找出日期或間隔值的字段值
144
SELECT
EXTRACT(HOUR
FROM
TIMESTAMP
'
2012-12-24 12:48:36
'
)
from
dual;
145
select
sysdate ,to_char(sysdate,
'
hh24
'
)
from
dual;
146
147
--
11.年月日的處理
148
select
older_date,
149
newer_date,
150
years,
151
months,
152
abs
(
153
trunc(
154
newer_date
-
155
add_months( older_date,years
*
12
+
months )
156
)
157
) days
158
159
from
(
select
160
trunc(months_between( newer_date, older_date )
/
12
) YEARS,
161
mod(trunc(months_between( newer_date, older_date )),
12
) MONTHS,
162
newer_date,
163
older_date
164
from
(
165
select
hiredate older_date, add_months(hiredate,rownum)
+
rownum newer_date
166
FROM
emp
167
)
168
);
169
--
12.處理月份天數不定的辦法
170
select
to_char(add_months(last_day(sysdate)
+
1
,
-
2
),
'
yyyymmdd
'
),last_day(sysdate)
from
dual
171
172
173
--
13.找出今年的天數
174
select
add_months(trunc(sysdate,
'
year
'
),
12
)
-
trunc(sysdate,
'
year
'
)
from
dual
175
--
14.不同時區的處理
176
select
to_char( NEW_TIME( sysdate,
'
GMT
'
,
'
EST
'
),
'
dd/mm/yyyy hh:mi:ss
'
) ,sysdate
177
from
dual;
178
179
--
15.5秒鐘一個間隔
180
Select
TO_DATE(
FLOOR
(TO_CHAR(sysdate,
'
SSSSS
'
)
/
300
)
*
300
,
'
SSSSS
'
) ,TO_CHAR(sysdate,
'
SSSSS
'
)
181
from
dual
182
--
16.一年的第幾天
183
select
TO_CHAR(SYSDATE,
'
DDD
'
),sysdate
from
dual
184
--
17.計算小時,分,秒,毫秒
185
select
186
Days,
187
A,
188
TRUNC(A
*
24
) Hours,
189
TRUNC(A
*
24
*
60
-
60
*
TRUNC(A
*
24
)) Minutes,
190
TRUNC(A
*
24
*
60
*
60
-
60
*
TRUNC(A
*
24
*
60
)) Seconds,
191
TRUNC(A
*
24
*
60
*
60
*
100
-
100
*
TRUNC(A
*
24
*
60
*
60
)) mSeconds
192
from
193
(
194
select
195
trunc(sysdate) Days,
196
sysdate
-
trunc(sysdate) A
197
from
dual
198
)
199
--
18,round[舍入到最接近的日期](day:舍入到最接近的星期日)
200
select
sysdate S1,
201
round
(sysdate) S2 ,
202
round
(sysdate,
'
year
'
)
YEAR
,
203
round
(sysdate,
'
month
'
)
MONTH
,
204
round
(sysdate,
'
day
'
)
DAY
from
dual
205
206
--
19,trunc[截斷到最接近的日期,單位為天] ,返回的是日期類型
207
select
sysdate S1,
208
trunc(sysdate) S2,
--
返回當前日期,無時分秒
209
trunc(sysdate,
'
year
'
)
YEAR
,
--
返回當前年的1月1日,無時分秒
210
trunc(sysdate,
'
month
'
)
MONTH
,
--
返回當前月的1日,無時分秒
211
trunc(sysdate,
'
day
'
)
DAY
--
返回當前星期的星期天,無時分秒
212
from
dual
213
214
--
20,返回日期列表中最晚日期
215
select
greatest(
'
01-1月-04
'
,
'
04-1月-04
'
,
'
10-2月-04
'
)
from
dual
216
--
21.計算時間差
217
--
注:oracle時間差是以天數為單位,所以換算成年月,日
218
219
select
floor
(to_number(sysdate
-
to_date(
'
2012-11-12 15:55:03
'
,
'
yyyy-mm-dd hh24:mi:ss
'
))
/
365
)
as
spanYears
from
dual;
--
時間差-年
220
select
floor
(to_number(sysdate
-
to_date(
'
2012-11-12 15:55:03
'
,
'
yyyy-mm-dd hh24:mi:ss
'
)))
as
spanDays
from
dual;
--
時間差-天
221
select
floor
(to_number(sysdate
-
to_date(
'
2012-11-12 15:55:03
'
,
'
yyyy-mm-dd hh24:mi:ss
'
))
*
24
)
as
spanHours
from
dual;
--
時間差-時
222
select
floor
(to_number(sysdate
-
to_date(
'
2012-11-12 15:55:03
'
,
'
yyyy-mm-dd hh24:mi:ss
'
))
*
24
*
60
)
as
spanMinutes
from
dual;
--
時間差-分
223
select
floor
(to_number(sysdate
-
to_date(
'
2012-11-12 15:55:03
'
,
'
yyyy-mm-dd hh24:mi:ss
'
))
*
24
*
60
*
60
)
as
spanSeconds
from
dual;
--
時間差-秒
224
--
22.查找月的第一天,最后一天
225
SELECT
Trunc(Trunc(SYSDATE,
'
MONTH
'
)
-
1
,
'
MONTH
'
) First_Day_Last_Month,
226
Trunc(SYSDATE,
'
MONTH
'
)
-
1
/
86400
Last_Day_Last_Month,
227
Trunc(SYSDATE,
'
MONTH
'
) First_Day_Cur_Month,
228
LAST_DAY(Trunc(SYSDATE,
'
MONTH
'
))
+
1
-
1
/
86400
Last_Day_Cur_Month
229
FROM
dual;
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

