我練習說來顯示誰在十月顯示員工姓名
select ename,hiredate from emp where
to_char(hiredate,'MON')='OCTOBER' AND to_char(hiredate,'DAY')='SUNDAY'
而且
顯示所有的employess月份聘請了上週日的僱員姓名誰在上個季度僱用。
在oracle中我們不能使用qq所以如何寫這個查詢?
我練習說來顯示誰在十月顯示員工姓名
select ename,hiredate from emp where
to_char(hiredate,'MON')='OCTOBER' AND to_char(hiredate,'DAY')='SUNDAY'
而且
顯示所有的employess月份聘請了上週日的僱員姓名誰在上個季度僱用。
在oracle中我們不能使用qq所以如何寫這個查詢?
知道,如果HIREDATE是在最後一個季度,你可以檢查月份是大於或等於10
select ename,
hiredate
from emp
where to_char(hiredate,'MM')>=10
對於您的其他問題,如statet here,MON
返回月份的縮寫名稱。這導致OCTOBER
不會是MON
的輸出。您要麼在to_char
中輸入MONTH
,要麼將其與OCT
進行比較。作爲替代,你可以這樣做。如果有的話請記住@ ThrostenKettner的評論。
select ename,
hiredate
from emp
where to_char(hiredate,'MM')=10
and to_char(hiredate,'D')=1
感謝和顯示十月份星期天聘用的員工姓名? –
select ename,hiredate from emp where to_char(hiredate,'MON')='OCT'and to_char(hiredate,'DAY')='SUNDAY'Thanks :) –
TO_CHAR(something,'D') 。您獲得的值取決於NLS_TERRITORY,因此您的查詢無法保證正常工作。 (我認爲這是一個缺陷,你不能在TO_CHAR中指定領土,以便在'D'上獲得可靠的響應。) –
用TO_CHAR('Q')得到季度。所以從SYSDATE拿到季度和計算前面:
select ename,hiredate
from emp
where to_char(hiredate, 'q') =
case to_char(sysdate, 'q')
when '1' then '4'
when '2' then '1'
when '3' then '2'
when '4' then '3'
end
and extract(year from hiredate) =
case when to_char(sysdate, 'q') = '1' then
extract(year from sysdate) - 1
else
extract(year from sysdate)
end;
至於星期天到10月,您的查詢看起來不錯,但你依靠數據庫英語設置。如果可能的話,或指定使用的語言更好地利用數字:
select ename, hiredate
from emp
where to_char(hiredate,'mm') = 10
and to_char(hiredate, 'FMDAY', 'nls_date_language = american') = 'SUNDAY';
編輯:我剛剛看了一遍你的問題,來想:什麼是「最後的」季度是什麼意思?在此之前的這個季度,正如我所假設的那樣,還是一年中的第四季度?那將只是where to_char(sysdate, 'q') = '4'
。編輯2:不得不將'天'改爲'FMDAY'。請參閱Alex Poole的解釋。
MON日期格式是當前sesison的NLS日期語言中的縮寫月份名稱。你可以可以使用簡短的名稱比較縮寫或完整月份名稱:
to_char(hiredate,'MON')='OCT'
或
to_char(hiredate,'FMMONTH')='OCTOBER'
的'FM' format modifier停止其添加尾隨空格,它的默認操作,直至長儘可能長的價值。如果你不這樣做,你必須填充固定值,或者修改結果。 (請注意,對於某些語言,縮寫需要FM進行比較,即使它們的長度可以更改也是如此;不是英文,因爲MON和DY值都是3個字符;但法語月份縮寫可以是3或4個字符)。
它通常最好使用月數爲這個雖然:
to_char(hiredate,'MM')='10'
,將讓你在十月任何一年;如果你想今年十月,你可以包括年份:
to_char(hiredate,'YYYYMM')='201510'
或者,如果你想在本年度的前一個月,你可以使用:
trunc(hire_date, 'MM') = add_months(trunc(sysdate, 'MM'), -1)
同樣的事情發生與天;在DAY格式墊到系統默認的最長的一天的名字,所以你需要:
to_char(hiredate,'DY')='SUN'
或
to_char(hiredate,'FMDAY')='SUNDAY'
你可以在這裏使用天數,但它們依賴語言環境了。如果你鑼使用的名字它的安全指定語言:
to_char(hire_date,'FMDAY','NLS_DATE_LANGUAGE=''ENGLISH''')='SUNDAY'
甲骨文確實有the Q date format model,固定日曆月 - 所以一月至三月爲Q1。你可能需要財務季度;或者可能需要前三個月;或者是其他東西。
好的答案。我偶然發現了過去的填充名字,並完全忘記了這一點。這是一個真正的麻煩。 –
在sql中,我們可以在datepart中使用qq。但是在oracle中沒有這樣的方法......對吧? –
「*在oracle中,我們不能使用qq,因此如何爲此編寫查詢?*」qq是什麼意思?如果你的意思是** QUARTER **,那麼你當然可以做到。但是你的要求似乎與季度產量無關。另外,使用**日名稱**時,請注意** TO_CHAR **是** NLS依賴**。如果您不指定'NLS_DATE_LANGUAGE',那麼使用不同'NLS_DATE_LANGUAGE'的人將會失敗。 –