虽然以下代码打印'周四错误',(10-FEB是星期四)
BEGIN
IF to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'Day')='Thursday' THEN
dbms_output.put_line('Correct');
ELSE
dbms_output.put_line('Wrong '||to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'Day'));
END IF;
END;
以下打印'正确',(09-FEB是星期三)
BEGIN
IF to_char(to_date('09-FEB-2011','DD-MON-YYYY'),'Day')='Wednesday' THEN
dbms_output.put_line('Correct');
ELSE
dbms_output.put_line('Wrong '||to_char(to_date('09-FEB-2011','DD-MON-YYYY'),'Day'));
END IF;
END;
我一直试图解决这个问题,但我做不到。任何帮助将非常感激。提前谢谢。
答案 0 :(得分:5)
to_char
默认为空格填充:
SQL> BEGIN
2 dbms_output.put_line('x' ||
3 to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'Day')||
4 'x');
5 END;
6 /
xThursday x
使用修饰符fm
来阻止填充:
SQL> BEGIN
2 IF to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'fmDay')='Thursday' THEN
3 dbms_output.put_line('Correct');
4 ELSE
5 dbms_output.put_line('Wrong '||to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'fmDay'));
6 END IF;
7 END;
8 /
Correct
PL/SQL procedure successfully completed
答案 1 :(得分:3)
提示:
select length(to_char(to_date('10-FEB-2011','DD-MON-YYYY'),'Day')) from dual;
返回9,但length('Thursday')
为8。
更多信息可在http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#i34510的Oracle文档中找到: 字符元素MONTH,MON,DAY和DY 用尾随空白填充到最长的完整月份名称的宽度,最长的缩写月份名称,最长的完整日期名称,或者最长的缩写日期名称,分别由NLS_DATE_LANGUAGE和NLS_CALENDAR参数的值确定的有效名称。例如,当NLS_DATE_LANGUAGE为AMERICAN且NLS_CALENDAR为GREGORIAN(默认值)时,MONTH的最大元素为SEPTEMBER,因此MONTH格式元素的所有值都填充为九个显示字符。 NLS_DATE_LANGUAGE和NLS_CALENDAR参数的值在TO_CHAR和TO_ * datetime函数的第三个参数中指定,或者从当前会话的NLS环境中检索。
强调我的。
答案 2 :(得分:0)
另一个提示:尝试使用修剪
一周的所有日期都是9。