#sql #oracle
#sql #Oracle
Вопрос:
Доброе утро
select CASE t.gift_club_start_date
WHEN ' ' THEN ' '
ELSE SUBSTR(t.gift_club_start_date,5,2)|| '/' ||SUBSTR(t.gift_club_start_date,7,2)|| '/' ||SUBSTR(t.gift_club_start_date,1,4)
END
from GIFT t
Это показывает, что если строки пусты, они отображаются пустыми.
Я пытаюсь выполнить этот код с помощью динамического SQL
'select CASE t.gift_club_start_date
WHEN '' '' THEN '' ''
ELSE SUBSTR(t.gift_club_start_date,5,2)|| ''/'' ||SUBSTR(t.gift_club_start_date,7,2)|| ''/'' ||SUBSTR(t.gift_club_start_date,1,4)
END
from GIFT t'
НО вывод показывает это // , когда строка пуста.
Итак, как я могу правильно закодировать, чтобы показать пустую строку? Эта строка WHEN '' '' THEN '' ''
Большое спасибо, mcuh
Ответ №1:
В принципе, вы можете использовать double '
для решения:
SQL> declare
2 vSQL varchar2(100);
3 vVar varchar2(100);
4 begin
5 vSQL := 'select '' '' from dual';
6 execute immediate vSQL into vVar;
7 dbms_output.put_line('result:<' || vVar || '>');
8 end;
9 /
result:< >
Другой способ может быть следующим:
SQL> declare
2 vSQL varchar2(100);
3 vVar varchar2(100);
4 begin
5 vSQL := q'[select ' ' from dual]';
6 execute immediate vSQL into vVar;
7 dbms_output.put_line('result:<' || vVar || '>');
8 end;
9 /
result:< >
Для вашей ситуации обратите внимание, что «пустой» отличается от ' '
; если вам нужно проверить наличие нулевых значений, вы должны использовать что-то вроде
WHEN t.gift_club_start_date is NULL THEN...
Ответ №2:
Вы можете использовать ||CHR(39)
'WHEN ' || CHR(39) || CHR(39) || ' THEN ' || CHR(39) || ' ' ||CHR(39)