SQL-запрос для поля имени без алфавита - PullRequest
1 голос
/ 24 августа 2011

У меня есть столбец Имя в таблице сотрудников. Я хочу видеть имена всех сотрудников, которые имеют символы, отличные от алфавита. Какой лучший запрос для этого?

Другое требование : вернуть все имена, в которых нет ни одного алфавита.

Примечание: все, что отличается от английского алфавита, не считается алфавитом в этом сценарии. В тексте «Андре Мюллер» в моем сценарии есть неалфавитные символы.

DECLARE @Employee TABLE (EmpID INT, EmpName VARCHAR(1000))
INSERT INTO @Employee (EmpID, EmpName) VALUES(1,'André Müller')
INSERT INTO @Employee (EmpID, EmpName) VALUES(2,'Lijo')
INSERT INTO @Employee (EmpID, EmpName) VALUES(3,'88')
INSERT INTO @Employee (EmpID, EmpName) VALUES(4,'--@#')
INSERT INTO @Employee (EmpID, EmpName) VALUES(5,'é ü')

Работают как Aproach 1, так и Approach 2 (спасибо людям, которые разместили ответы). Что из них лучше и почему?

--Aproach 1
SELECT * FROM @Employee WHERE EmpName COLLATE Latin1_General_CI_AS LIKE '%[^a-z]%'

--Approach 2
SELECT * FROM @Employee WHERE EmpName LIKE '%[^a-zA-Z]%'

Спасибо

Lijo

Ответы [ 5 ]

5 голосов
/ 24 августа 2011

Вам нужно использовать LIKE, но с COLLATE (для SQL Server), чтобы игнорировать акценты

WHERE
   EmployeeName COLLATE Latin1_General_CI_AI LIKE '%[^a-z]%

«Андре Мюллер» является допустимым именем, но будет «ложным», потому что ни é, ни ü не находятся в диапазоне a-z

2 голосов
/ 24 августа 2011

Не знаю, правильно ли я понял ваш вопрос, но думаю, что это может быть решением:

SELECT *
FROM employee
WHERE name LIKE '%[^a-zA-Z]%'
0 голосов
/ 24 августа 2011

Вы можете использовать patindex и включать любые символы, которые есть в вашем алфавите.Здесь с некоторыми шведскими символами и space.

select *
from Emp
where patindex('%[^A-ZÅÄÖ a-zåäö]%', Name) > 0

Edit:

Благодаря комментарию @gbn теперь я знаю, что вы можете использовать collate для упрощениявыражение.CI заботится о кейсе, а AI заботится об акцентах.

where patindex('%[^A-Z ]%', Name COLLATE Latin1_General_CI_AI) > 0
0 голосов
/ 24 августа 2011

Это на самом деле зависит от того, что вы подразумеваете под «алфавитом».В простом случае это перечислит все строки в employee, где столбец имени содержит символ, отличный от «AZ»:

SELECT 
   * 
FROM 
   employee
WHERE 
   name LIKE '%[^A-Z]%'

Вы можете расширить это по мере необходимости, например, LIKE '%[^ A-Z]% проверит другие символычем AZ и пробел.Чтобы справиться с другими алфавитами, включая акцентированные символы и т. Д., Вы можете либо включить их, либо использовать сопоставление для необходимого массажа.

Для получения дополнительной информации см. Подробную информацию о шаблоне.соответствие в справке предложения LIKE для T-SQL .

0 голосов
/ 24 августа 2011

Вы можете использовать Ascii и Left функции t-sql для этого.Просто найдите слева 1 символ и используйте значения ascii , чтобы проверить, не находятся ли они между диапазоном малых и прописных последних значений ascii.

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