查询#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,我会得到答案
这背后的原因是什么。
答案 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()
从字符串中删除前导和尾随字符(或两者)。