Я пытаюсь перейти в условие if в PLSQL, когда определенные даты указаны в определенный день недели.Название дня, заполненного пробелами, предотвращает правильное поведение
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» на некоторых печатных строках.
Похоже, что по какой-то причине, когда я печатал значения для дневных имен, в программу добавлены пробелы. Я предполагаю, что длина моего символа занимает самое длинное имя дня («DONDERSDAG») в моей локали. И все с меньшим количеством символов, чем при добавлении пробелов. Таким образом, zaterdag становится = 'ZATERDAG', а zondag становится = 'ZONDAG'. Теперь он работает, но знает ли кто-нибудь простой способ предотвратить это?
возможно дубликат [Issue при сравнении результата к \ _char (MyDate, 'день') в строку] (http://stackoverflow.com/questions/13269676/вопрос-когда-сравнения-результат-оф-к-charmydate день к струне) –