#sql #oracle #sql-like
#sql #Oracle #sql-подобный
Вопрос:
Я наткнулся на один онлайн-сайт, который предполагает, что следующее является допустимым утверждением SQL….
SELECT *
FROM PARTS
WHERE Desc1 LIKE '[AMD]%'
Предполагается, что это вернет все desc1, которые начинаются с A, M или D
Я не могу заставить это возвращать результаты и должен это сделать
SELECT *
FROM PARTS
WHERE Desc1 LIKE 'A%' OR Desc1 LIKE 'M%' OR Desc1 LIKE 'D%'
Я использую Oracle Express 11g (XE) правильный ли формат ‘[AMD]%’?
Ответ №1:
Синтаксис, на который вы ссылаетесь, — это синтаксис SQL Server. Oracle имеет лучшую поддержку регулярных выражений, поэтому вы бы сделали:
SELECT *
FROM PARTS
WHERE regexp_like(Desc1, '^[AMD].*
На самом деле, .*$
это не нужно, так что вы можете написать WHERE regexp_like(Desc1, '^[AMD]'
. Разница между LIKE
шаблонами и регулярными выражениями заключается в том, что LIKE
шаблоны соответствуют всей строке, а регулярные выражения - только ее части. Когда я использую регулярные выражения в SQL, они часто совпадают со всей строкой, чтобы избежать когнитивного диссонанса.
Кстати, вы также можете сделать:
WHERE substr(DESC1, 1, 1) IN ('A', 'M', 'D')
Комментарии:
1. Отличная помощь @Gordon Linoff, существует ли также синтаксис Oracle для сопоставления или улучшения синтаксиса SQL Server ВЫБЕРИТЕ * ИЗ ЧАСТЕЙ, ГДЕ GRP1, НАПРИМЕР, указывает '[A-D]%', а GRP1 начинается с любой из букв A, B, C или D?
Ответ №2:
По крайней мере, для Oracle запрос, который вы нашли в Интернете, выглядит неправильно. Правильная версия будет:
SELECT * FROM PARTS WHERE REGEXP_LIKE (Desc1, '^[AMD]');
Взгляните на документацию Oracle: https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm
);
На самом деле, .*$
это не нужно, так что вы можете написать WHERE regexp_like(Desc1, '^[AMD]'
. Разница между LIKE
шаблонами и регулярными выражениями заключается в том, что LIKE
шаблоны соответствуют всей строке, а регулярные выражения — только ее части. Когда я использую регулярные выражения в SQL, они часто совпадают со всей строкой, чтобы избежать когнитивного диссонанса.
Кстати, вы также можете сделать:
Комментарии:
1. Отличная помощь @Gordon Linoff, существует ли также синтаксис Oracle для сопоставления или улучшения синтаксиса SQL Server ВЫБЕРИТЕ * ИЗ ЧАСТЕЙ, ГДЕ GRP1, НАПРИМЕР, указывает ‘[A-D]%’, а GRP1 начинается с любой из букв A, B, C или D?
Ответ №2:
По крайней мере, для Oracle запрос, который вы нашли в Интернете, выглядит неправильно. Правильная версия будет:
Взгляните на документацию Oracle: https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm