1. 檢視資料庫字符集(如果字符集不同,可能顯示亂碼)
2. 檢視資料庫中指定日期為週幾
create or replace function get_weekday(pdate date) return number is不推薦(根據nls設定不同結果不同,例如周一為第一天和週日為第一天的weekday結果不同)vresult number;
begin
select case to_char(pdate, 'fmday', 'nls_date_language=english')
when 'monday' then
1when 'tuesday' then
2when 'wednesday' then
3when 'thursday' then
4when 'friday' then
5when 'saturday' then
6when 'sunday' then
7end d
into vresult
from dual;
return vresult;
end;
select sysdate today,3. oracle 中關於星期(iw和ww)的演算法oracle中對於星期的計算規則中,其中關於計算本週是一年的第幾周,有兩種格式,iw和ww,其中的區別官方文件解釋如下:to_char(sysdate, 'd') weekday,
trunc(sysdate, 'dd') - to_char(sysdate, 'd') + 1 weekfirstday,
trunc(sysdate, 'dd') - to_char(sysdate, 'd') + 7 weeklastday
from dual;
從文件中可以看出,ww的演算法是: int(dayofyear+6)/7,個人覺得這種演算法有點「2」。相信一般情況下,我們不會使用ww的吧,應該iw使用的比較多。
關於oracle提到的這個星期的計算iso標準,是這樣的:
下面這兩張**,是從oracle官方文件中擷取出來的:
table 3-7 first iso week of the year: example 1, january 1998
motu
weth
frsa
suiso week--
-123
4first iso week of 199856
78910
11second iso week of 1998
1213
1415
1617
18third iso week of 1998
1920
2122
2324
25fourth iso week of 1998
2627
2829
3031
-fifth iso week of 1998
table 3-8 first iso week of the year: example 2, january 1999
motu
weth
frsa
suiso week--
--12
3fifty-third iso week of 199845
6789
10first iso week of 1999
1112
1314
1516
17second iso week of 1999
1819
2021
2223
24third iso week of 1999
2526
2728
2930
31fourth iso week of 1999
從表中可以看出,按照iso標準演算法,同樣是1月1日,2023年是算第一周,而2023年的1月1日卻算為上一年的最後一周。
這裡需要注意的是,iso標準中星期的第一天是周一,而oracle中其他一些日期處理演算法中(如d),預設每週的第一天是週日。因為第一天是週日還是周一,由引數nls_territory決定,而該引數的預設值是從nls_lang繼承過來的,nls_lang預設值為america,因此預設週日是每週的第一天)。
我們很多人認為中國人每週第一天從周一開始,其實不是這樣哦,從oracle上可以看出來,其實我國的每週第一天仍然是週日,與美國一致,只有德國、法國等一些歐洲國家是從周一開始的:
sql>參考資料select to_char(sysdate,』yyyymmdd』) from
dual;
to_char(
——–20110901
sql>
alter session set nls_territory=
america;
session altered.
sql>
select to_char(sysdate,』d'
) from dual;t-
5sql> alter session set nls_territory=china;
session altered.
sql> select to_char(sysdate,』d
') from
dual;t-
5sql
>
alter session set nls_territory=
germany;
session altered.
sql>
select to_char(sysdate,』d'
) from dual;t-
4
關於ORACLE中取星期的問題
select to char sysdate,day from dual 可以得到當前是一周中的星期幾 select to char sysdate,d from dual 可以得到當前是一周中的第幾天,由於國外人的習慣與中式不同所以通常為 select to char sysdate 1,d fr...
關於oracle中in和exists
今天看sql語句的時候發現了exists這個關鍵字,記得剛用這個關鍵字的時候只知道它和關鍵字in的作用是一樣的,當時覺得無非就是我的條件匹配到子結果集裡面的資料。今天打算把這兩個關鍵字具體怎麼回事區分一下,上網上看了一下,懂了一些兩者的區別,其中還涉及到了效能問題,很吃驚!2018 11 8再次更新...
oracle中關於生成累計和
首先建立oracle基礎表如下 現在要求分別累計各部門的工資之和 select empno,deptno,ename,sal,hiredate,sum sal over order by hiredate as totalsal from emp order by hiredate 效果如圖 當分析...