填充空格的日期名称会妨碍正常行为

时间:2014-11-29 10:32:53

标签: 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                   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_huidigeDag时,它清楚地显示了“ZATERDAG”和“ZONDAG&#39;在一些印刷线上。

由于某些原因,当我打印日期名称的值时,程序会添加空格。我想在我的语言环境中需要最长日期名称(&#39; DONDERSDAG&#39;)的字符长度。所有字符都少于添加空格的字符。所以zaterdag变成了&#39; ZATERDAG&#39;和zondag成为=&#39; ZONDAG&#39;。现在它正在运作,但有人知道一种简单的方法可以防止这种情况吗?

1 个答案:

答案 0 :(得分:1)

问题在于DAY格式。根据{{​​3}}:

  

日期

     

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

要禁用该行为,您必须使用date format documentation

  

<强> FM

     

在TO_CHAR函数的日期时间格式元素中,此修饰符会抑制后续字符元素(例如MONTH)中的空白,并在日期格式模型中抑制后续数字元素(例如MI)的前导零。 如果没有FM,则字符元素的结果始终用空白填充到固定长度,并且始终为数字元素返回前导零。 使用FM来抑制空白填充,返回值的长度可能会有所不同

在您的特定情况下:

    v_huidigeDag := to_char(v_mathDatum, 'fmDAY');