Intereting Posts
Как решить закрытую ошибку набора данных при запуске запроса на обновление в Delphi 7? Моно на Debian 7 Linq To SQL String ссылка на объект не установлена ​​в экземпляр объекта Выполнение сравнения LIKE в поле INT Понимание отбрасывания от байта к маске SQL, как преобразовать строку с диапазоном дат во многие строки с каждой датой pandas read_sql с параметрами и подстановочным оператором Проблема с запросом Sql Server2005 PreparedStatement.addBatch в java имеет какие-либо ограничения? Комбинированные запросы Django с выражениями Разнообразны ли базы данных и функциональное программирование? JPA многие-ко-многим сохраняются, чтобы присоединиться к таблице group_concat и как использовать номер строки в sqlite Как выбрать мой первичный ключ? Использование параметра из формы в инструкции IN SQLite3 Имитировать ПРАВИЛЬНУЮ ВЗАИМОДЕЙСТВУЮЩУЮ ПОСЛЕДУЮЩУЮ С ЛЕВЫМИ СПОСОБАМИ И СОЮЗОМ

SQL-совпадение по компоновке букв и цифр без использования регулярных выражений

Можно ли написать инструкцию SQL для MySQL, которая находит все строки, которые соответствуют конкретному расположению букв / цифр без использования REGEXP?

т.е. SELECT myCol FROM myTable WHERE myCol = ' {number} {number} {letter} '

Должны возвращать 12X и 34Y, но не 123X или 34YY

[Я задал аналогичный вопрос раньше – (соответствие SQL для компоновки букв и цифр ). Разница в том, что я обнаружил, что я не могу использовать регулярные выражения с драйвером ADO.Net, который я использую. Более того, я не могу обновить его, так как я использую Visual Studio 2003, который несовместим с более поздними версиями.]

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

 SELECT myCol FROM myTable WHERE SUBSTRING(myCol, 1 , 1) >= 'A' AND SUBSTRING(myCol, 1 , 1) <= 'Z' AND SUBSTRING(myCol, 2 , 1) >= 'A' AND SUBSTRING(myCol, 2 , 1) <= 'Z' AND SUBSTRING(myCol, 3 , 1) >= '0' AND SUBSTRING(myCol, 3 , 1) <= '9' 

Ну, да, но это было бы очень медленно и ресурсоемким …

 SELECT myCol FROM myTable WHERE CHAR_LENGTH(myCol) = 3 AND SUBSTRING(myCol, 1, 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0') AND SUBSTRING(myCol, 2, 1) IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0') AND SUBSTRING(myCol, 3, 1) IN ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z') 

Это будет соответствовать «12X» и «34Y», но не «123X» или «34YY».

 SELECT myCol FROM myTable WHERE ( myCol LIKE '12X%' OR myCol LIKE '34Y%' ) AND myCol NOT LIKE '34YY%' 

Грубый пример, но должен помочь вам понять проблему. Не могу больше помочь, так как ваш пример не так точен.

Если ваш запрос так же прост, как ваш пример (т. Е. Без параметров), можете ли вы использовать хранимую процедуру для возврата результатов с помощью Reg Exp? В этом случае водитель не должен знать или заботиться о том, чтобы вы использовали Reg Exp.

Попробуй это –

 SELECT myCol FROM myTable WHERE myCol REGEXP '[[:alpha:]]{2}[[:digit:]]{1}' 

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Если вы используете EMS SQL Manager для MySQL, вы можете использовать RegEx для фильтрации данных.

 SELECT col FROM tbl WHERE col REGEXP '^[[:alpha:]]{2}[[:digit:]]{1}$' 

RegEx:

 ^[[:alpha:]]{2}[[:digit:]]{1}$ 

^ = начинается с

[[:alpha:]] = алфавит

[[:digit:]] = числа

{n} = ровно n экземпляров

Надеюсь это поможет.