2015-07-13 53 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()从字符串中删除前导字符和尾随字符(或两者)。

相关问题