If statement 用空格填充的日期名称会阻止正确的行为

If statement 用空格填充的日期名称会阻止正确的行为,if-statement,plsql,varchar2,in-operator,If Statement,Plsql,Varchar2,In Operator,当确定日期在一周中的某一天时,我试图在PLSQL中进入if条件 DECLARE v_gebDatum CONSTANT DATE := to_date('21-01-1995', 'dd-MM-yyyy'); v_mathDatum DATE := v_gebDatum; v_huidigeDag VARCHAR2(20); v_teller

当确定日期在一周中的某一天时,我试图在PLSQL中进入if条件

DECLARE
  v_gebDatum    CONSTANT     DATE                 := to_date('21-01-1995', 'dd-MM-yyyy');
  v_mathDatum                DATE                 := v_gebDatum;
  v_huidigeDag               VARCHAR2(20);

  v_teller                   number   := 0;
BEGIN
  WHILE to_char(v_mathDatum, 'yyyy') < to_char(sysdate, 'yyyy')
  LOOP
    v_mathDatum := add_months(v_mathDatum, 12);
    v_huidigeDag := to_char(v_mathDatum, 'DAY');
    dbms_output.put_line(v_huidigeDag);
    IF v_huidigeDag IN('ZATERDAG', 'ZONDAG')
    THEN
      dbms_output.put_line(v_mathDatum);
    END IF;
  END LOOP;
END;
声明
v_gebDatum固定日期:=截止日期('21-01-1995','dd-MM-yyyy');
v_mathDatum日期:=v_gebDatum;
v_huidigeDag VARCHAR2(20);
v_出纳员编号:=0;
开始
而to_char(v_mathdatam,'yyyy')
问题是我不能让它工作。在打印v_huidigeDag时,在一些打印行中清楚地显示了“ZATERDAG”和“ZONDAG”值


看来,出于某种原因,当我打印日期名称的值时,程序在其中添加了空格。我猜在我的区域设置中,最长的日名('DONDERSDAG')需要字符长度。所有字符数少于此数的内容都会添加空格。所以zaterdag变成了='zaterdag',zondag变成了='zondag'。现在它正在工作,但是有人知道一种简单的方法来防止这种情况吗?

问题在于
日格式。根据报告:

日期名称,用空格填充,以显示该元素使用的日期语言中最宽日期名称的宽度

要禁用该行为,必须使用:

FM

在TO_CHAR函数的datetime格式元素中,此修饰符在日期格式模型中抑制后续字符元素(如MONTH)中的空格,并抑制后续数字元素(如MI)的前导零如果没有FM,字符元素的结果总是用空格右键填充到固定长度,数字元素总是返回前导零使用FM抑制空白填充,返回值的长度可能会有所不同

在您的特殊情况下:

    v_huidigeDag := to_char(v_mathDatum, 'fmDAY');
可能重复的