Как использовать условие LIKE в SQL с числовым полем? - PullRequest
10 голосов
/ 10 июля 2009

Я использую этот запрос, чтобы получить некоторые конкретные данные: "select * from emp, где emp_name LIKE 's%'";

emp_nam - символьное поле. Как я могу использовать то же логическое условие с числовым полем? что-то вроде:

"выберите * из emp, где emp_id ????

где emp_id - числовое поле.

Спасибо

Ответы [ 9 ]

8 голосов
/ 11 июля 2009

В Access вы можете объединить числовое поле с пустой строкой, чтобы преобразовать его в строку, которую можно сравнить, используя LIKE:

select * from emp where emp_id & '' like '123*'

Также обратите внимание, что Access использует * не% в качестве символа подстановки. См .: Оператор Like (Microsoft Access SQL) .

8 голосов
/ 10 июля 2009

Вы не можете использовать подстановочный знак для числа, однако, если вам это действительно нужно, вы можете преобразовать число в тип varchar и затем выполнить сопоставление с подстановочным знаком.

например.

SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'
3 голосов
/ 10 июля 2009

В синтаксисе SQL ядра СУБД Access для использования подстановочного знака % ЛИБО вы должны использовать режим запросов ANSI-92 ИЛИ использовать ключевое слово ALIKE вместо ключевого слова LIKE.

Подробнее о режиме запросов ANSI-92 см. О режиме запросов ANSI SQL (MDB) в справке Access2003 (то же самое будет применяться к ACE в Access2007, но некоторые разделы из справки Access2007 были удалены. причина). Если вы делаете это в коде, вам нужно будет использовать OLE DB, например. ADO classic в VBA.

Для ключевого слова ALIKE ... вы не найдете много. Это одна из тех официально недокументированных функций, что означает, что существует элемент риска, что он может быть удален из будущей версии ядра базы данных Access. Лично я бы взял на себя этот риск из-за необходимости явного кодирования для режима запросов ANSI-89 и режима запросов ANSI-92, что необходимо для правил проверки и ограничений CHECK (см. Пример ниже). Кодирование для обоих может быть выполнено, но оно более сложное и сложное, чтобы получить право, т. Е. Имеет более непосредственный риск, если вы ошибетесь.

Это ответ. Теперь о «решении» ...

Очевидно, что если вам нужно выполнить запрос такого типа для emp_id, то домен неверен, т. Е. Это не должно быть числовое поле.

Вылечить болезнь: измените схему, сделав ее текстовым полем, добавив правило домена, обеспечивающее, чтобы оно содержало только числовые символы, например,

CHECK (emp_id NOT LIKE '%[^0-9]%')

РЕДАКТИРОВАТЬ тег 'Jet' был добавлен. Приведенное выше ограничение CHECK необходимо переписать, поскольку ядро ​​базы данных Access имеет собственный синтаксис: замените символ ^ на !. Кроме того, чтобы сделать его совместимым как с режимом запросов ANSI-89, так и с режимом запросов ANSI-92, используйте ключевое слово ALIKE, т.е.

CHECK (emp_id NOT ALIKE '%[!0-9]%')
3 голосов
/ 10 июля 2009

Нет, вы не можете использовать LIKE для числовых полей. Попробуйте использовать <, > или =, >=, <=;)

Если вы хотите искать в числовом поле такие вещи, как «начиная с 12» или что-то подобное, ваш дизайн не соответствует вашим потребностям.

2 голосов
/ 29 января 2014

Символ '%' работал для меня на сервере MS -SQL. См. http://technet.microsoft.com/en-us/library/aa933232%28v=sql.80%29.aspx.

Запрос select * from MyTable where ID like '548%' работает на MS-SQL Server 2008 R2 и возвращает результаты с идентификаторами 5481,5485 и т. Д. Столбец идентификатора имеет тип int.

1 голос
/ 25 июля 2015

с использованием CONCAT для неявного преобразования целого числа в строку

ВЫБРАТЬ * ИЗ города, ГДЕ КОНКАТ (id_city, '') НРАВИТСЯ '% 119%'

1 голос
/ 10 июля 2009

Используйте функцию cast или convert в поле emp_id, и вы можете сравнить ее с like.

0 голосов
/ 05 мая 2015

В FileMaker SQL вы можете преобразовать любое поле в строку с помощью функции STRVAL:

SELECT * FROM emp WHERE STRVAL(emp_id) LIKE '1%'


Вот реальный пример использования этого в FileMaker:

Как перечислить все записи, которые содержат ASCII 0 в числовом поле

SELECT emp_id FROM emp WHERE STRVAL(someNumericField) LIKE '%'+CHR(0)+'%'

0 голосов
/ 01 июля 2014

Привет, у меня возникли проблемы с использованием поплавка. Мне пришлось разыграть два тима (каст (EmpId как bigint) как varchar (15)), как "% 903%". Надеюсь, кто-то найдет это полезным

...