2016-11-23 5 views
-1
select * from emp where ename like '[bsp]%'; 

Он отображает результат, сравнивая первую букву каждой записи в столбце ename с помощью b, s и p в MS SQL Server.Как сравнить с записями в таблице, используя оператор с квадратными скобками в оракуле 10g?

Как достичь такого же результата с использованием оракула 10g с одним подобным оператором?

ответ

1

Оператор на языке SQL поддерживает только две подстановочные знаки: % для любого количества символов и _ для одного символа. Он не поддерживает регулярные выражения. Оператор LIKE в Microsoft T-SQL расширяет стандарт SQL и предлагает поддержку регулярных выражений бедных.

В Oracle вы должны использовать правильное регулярное выражение:

select * 
from emp 
where regexp_like(ename, '[bsp]$', 'i'); 

Для получения более подробной информации обратитесь к руководству: http://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions007.htm#i1048942

Обратите внимание, что регулярные выражения, используемые regexp_like() очень разные (и более сложные), чтобы простое выражение «диапазон», которое предлагает T-SQL.

Другой способ выразить это будет:

select * 
from emp 
where lower(substring(ename, -1)) in ('b', 's', 'p'); 
+0

Второй подход работает очень хорошо. Спасибо. Но где мы используем квадратные скобки в оракуле – Mathis

+0

@Mathis: см. Мой первый пример: в (реальном) регулярном выражении –