为什么我们在char函数中使用fm和trim

时间:2015-07-13 10:25:10

标签: sql database oracle

查询#1

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'; 

如果我先查询,我会得到答案。

如果我做第二次查询,我没有得到答案。

如果我在第三次查询中使用fm,我会得到答案

这背后的原因是什么。

3 个答案:

答案 0 :(得分:1)

原因Oracle(我猜您正在使用Oracle)添加空格(填充),以便结果始终相同" size" (格式化)格式化值时。

假例子,没有修剪或fm(哦,这格式有多好!)

01 January   2015
12 September 2015

使用Fm版本或修剪,您可以删除这些"填充"空格。

假例子,有修剪或fm(哦,那很难看,但至少我没有这些空间)

1 January 2015
12 September 2015

答案 1 :(得分: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_DATE_LANGUAGE的NLS设置为ENGLISH,因此May可能需要3个字符,而9月需要9个字符。因此,默认情况下,它还会为May增加6个字符。

答案 2 :(得分:0)

FM amodifier函数中的格式模型中使用的TO_CHAR控制空白填充和精确格式检查。 SQL TRIM()从字符串中删除前导和尾随字符(或两者)。