Когда виртуальный столбец использует AS в SQL? - PullRequest
2 голосов
/ 28 ноября 2011

Я не знал, как искать ответ:

select orderid, REGEXP_REPLACE (
orderid, 
'^0+(.)',
'\1'
) as new_order_id
from orders 
where length('new_order_id') < 6

Это ничего не возвращает. Но я знаю, что данные есть. Если я сделаю:

select orderid, REGEXP_REPLACE (
orderid, 
'^0+(.)',
'\1'
) as new_order_id
from orders 
order by order_id asc

Я получаю идентификаторы заказа, такие как 1, 2, 3 ...

Так, как я могу вернуть те, которые меньше шести? Выполняет ли операция where мои возвращенные данные regexp_replace после возвращения набора данных. Oracle, если это имеет значение.

Кроме того, я считаю, что мой запрос выбивает все ведущие нули и заменяет его ничем. Не уверен, что означает \ 1. Да, я скопировал это. Я думал, что это ничего не значит, чего я и хочу. Просто обрежьте ведущие нули.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

В вашем запросе

where length('new_order_id') < 6

сравнивает длину буквенной строки 'new_order_id', а не значение поля new_order_id.

Попробуйте удалить кавычки:

where length(new_order_id) < 6
2 голосов
/ 29 ноября 2011

Попробуйте это:

select * from
(select orderid
      , regexp_replace(orderid,'^0+(.)','\1') new_order_id
   from orders)
where length(new_order_id) < 6;

Вы можете избежать использования регулярных выражений:

select orderid
     , ltrim(orderid,'0') new_order_id
  from orders
 where length(ltrim(orderid,'0'))<6
 order by 1;
1 голос
/ 28 ноября 2011

Длина строки 'new_order_id' никогда не бывает меньше 6. Возможно, вам придется вместо этого ввести length(regexp_replace(...)) < 6, если oracle не поддерживает использование имени выходного столбца без кавычек (я понятия не имею).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...