当确定日期在一周的特定日期时,我试图进入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;。现在它正在运作,但有人知道一种简单的方法可以防止这种情况吗?
答案 0 :(得分:1)
问题在于DAY
格式。根据{{3}}:
日期强>
日期的名称,用空格填充,以显示此元素使用的日期语言中显示最广泛名称的宽度。
要禁用该行为,您必须使用date format documentation:
<强> FM 强>
在TO_CHAR函数的日期时间格式元素中,此修饰符会抑制后续字符元素(例如MONTH)中的空白,并在日期格式模型中抑制后续数字元素(例如MI)的前导零。 如果没有FM,则字符元素的结果始终用空白填充到固定长度,并且始终为数字元素返回前导零。 使用FM来抑制空白填充,返回值的长度可能会有所不同。
在您的特定情况下:
v_huidigeDag := to_char(v_mathDatum, 'fmDAY');