2015-07-13 55 views
-1

查詢#1爲什麼我們使用的FM和焦功能修剪

Select * 
from EMPLOYEE 
where trim(to_char(joining_date,'Month')) ='January'; 

查詢#2

select * 
from employee 
where to_char(joining_date,'Month')='January'; 

查詢#3

select * 
from employee 
where to_char(joining_date,'fmMonth')='January'; 

如果我做我的第一個查詢得到答案。

如果我做第二個查詢,我沒有得到答案。

如果我用3號查詢調頻我得到的答案

這背後的原因。

+0

你能演示演示數​​據嗎? –

回答

0

使用FM(表示格式掩碼)前綴,您正在應用format_mask。這意味着您要求查詢引擎確定要抑制零和空白。

如果你問爲什麼修剪或FM,那麼你應該嘗試運行這兩個查詢,以瞭解它:

select length(trim(to_char(to_date('15052015', 'DDMMYYYY'), 'MONTH'))) from dual; 
select length(to_char(to_date('15052015', 'DDMMYYYY'), 'MONTH')) from dual; 
select length(trim(to_char(to_date('15092015', 'DDMMYYYY'), 'MONTH'))) from dual; 
select length(to_char(to_date('15092015', 'DDMMYYYY'), 'MONTH')) from dual; 

由於您的NLS默認爲NLS_DATE_LANGUAGE設置是英語,月花費3個字符,而九月發生9個字符。因此,默認情況下,它會爲May添加6個額外的字符。

+0

我運行的問題答案是7(1月)和9(9月)。但我不明白我的問題。 – Avinash

+0

嘗試運行所有4個查詢並觀察結果。我試着在下面的查詢中解釋。即使是5月份,你的長度也是9,而如果你修剪你會看到它3.因此,我期望的輸出是3,9,9,9 – SMA

+0

是的,你是對的,你可以解釋我爲什麼 – Avinash

1

原因甲骨文(我猜你正在使用Oracle)添加空格(填充),以便格式化值時結果始終具有相同的「大小」(格式)。

假例如,沒有裝飾或fm(哦,如何很好的格式化的就是這個!)

01 January 2015 
12 September 2015 

隨着Fm版本或修剪,刪除這些「填充」的空間。

假例如,裝飾或fm(哦,這是醜陋的,但至少我不知道所有這些空間)

1 January 2015 
12 September 2015 
0

FM amodifier,格式模型應用於TO_CHAR功能,控制空白填充和精確的格式檢查。 SQL TRIM()從字符串中刪除前導字符和尾隨字符(或兩者)。

相關問題