Ето три примера за връщане на редове, които съдържат буквено-цифрови знаци в SQL Server.
Буквено-цифровите знаци са азбучни и цифрови знаци.
Примерни данни
Да предположим, че имаме следната таблица:
CREATE TABLE t1 (
c1 varchar(255) NULL
);
INSERT INTO t1 VALUES
('Music'),
('Live Music'),
('Café'),
('Café Del Mar'),
('100 Cafés'),
('[email protected]'),
('1 + 1'),
('()'),
('[email protected]#&()–[{}]:;'',?/*'),
('`~$^+=<>“'),
('$1.50'),
('Player 456'),
('007'),
(null),
(''),
('é'),
('É'),
('é 123'),
('ø'),
('ø 123');
SELECT c1 FROM t1;
Резултат:
+----------------------+ | c1 | +----------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +----------------------+
Пример 1:Ред съдържа буквено-цифрови данни
Следният код връща редове, които съдържат буквено-цифрови знаци (и може да съдържат небуквени и цифрови знаци):
SELECT c1 FROM t1
WHERE c1 LIKE '%[a-zA-Z0-9]%';
Резултат:
+-------------------+ | c1 | |-------------------| | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | $1.50 | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +-------------------+
Пример 2:Ред съдържа САМО буквено-цифрови данни
Следният код връща редове, които съдържат само буквено-цифрови знаци:
SELECT c1 FROM t1
WHERE c1 NOT LIKE '%[^a-zA-Z0-9]%'
AND c1 LIKE '%[a-zA-Z0-9]%';
Резултат:
+-------+ | c1 | |-------| | Music | | Café | | 007 | | é | | É | | ø | +-------+
Интервалите се считат за небуквени и цифрови. Можем да включим интервали, като коригираме кода към следното:
SELECT c1 FROM t1
WHERE c1 NOT LIKE '%[^a-zA-Z0-9 ]%'
AND c1 LIKE '%[a-zA-Z0-9 ]%';
Резултат:
+--------------+ | c1 | |--------------| | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +--------------+
Пример 3:Алтернативен метод
Като алтернатива можем да използваме PATINDEX()
функция за постигане на същия резултат.
Следният код връща редове, които съдържат само буквено-цифрови знаци:
SELECT c1 FROM t1
WHERE PATINDEX('%[^0-9a-zA-Z]%', c1) = 0
AND PATINDEX('%[a-zA-Z0-9]%', c1) > 0;
Резултат:
+-------+ | c1 | |-------| | Music | | Café | | 007 | | é | | É | | ø | +-------+
И с интервали:
SELECT c1 FROM t1
WHERE PATINDEX('%[^0-9a-zA-Z ]%', c1) = 0
AND PATINDEX('%[a-zA-Z0-9 ]%', c1) > 0;
Резултат:
+--------------+ | c1 | |--------------| | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | Player 456 | | 007 | | é | | É | | é 123 | | ø | | ø 123 | +--------------+