Можем ли мы иметь несколько случаев, то заявления в SQL - PullRequest
0 голосов
/ 18 октября 2011

Я пытаюсь что-то, что требует case в случае, если я просто хотел убедиться, что мы можем использовать несколько case тогда? Я запускаю это на sql teradata Код, который я пытаюсь использовать, как показано ниже

Если у кого-то есть идея получше, дайте мне знать.Я не могу использовать числовую функцию.

Ответы [ 2 ]

1 голос
/ 11 апреля 2012

Да, вы можете использовать вложенные CASE операторы.Нет проблем с этим в Teradata

0 голосов
/ 18 октября 2011

Ладно -
Чтобы определить, содержит ли строка произвольной длины только числовые символы (или нет), вы можете использовать повторный CTE.

Обратите внимание, что я не знаю, поддерживает ли ваша СУБД рекурсивные CTE, но это потенциальное решение.Кроме того, я не уверен в влиянии на производительность - однако, он действительно удаляет многократный эффект CASE (И вообще, почему это не фактическое числовое поле?).

Итак ... Длятаблица, которая выглядит следующим образом:

id   ch
================
1   1234567890
2   asdg      

Этот оператор возвращает все строки, которые содержат только числовые символы (любой длины):

WITH splitstring (id, chard, start, orig) as (
                  SELECT id, SUBSTRING(ch, 1, 1), 1, ch
                  FROM chartable
                  UNION ALL
                  SELECT id, SUBSTRING(orig, start + 1, 1), start + 1, orig
                  FROM splitstring
                  WHERE LENGTH(orig) > start)
SELECT * 
FROM chartest as a
WHERE NOT EXISTS (SELECT '1'
                  FROM splitstring as b
                  WHERE a.id = b.id
                  AND chard NOT BETWEEN '0' AND '9')

Без некоторыхВ более широком контексте довольно сложно точно знать, чего вы пытаетесь достичь.Однако это должно быть адаптировано к вашим потребностям.

(Как примечание: DB2 для iSeries, похоже, также не поддерживает регулярные выражения ...)

...