【发布时间】:2015-01-24 09:22:16
【问题描述】:
我有一个包含 210 万行的许多列的表。以下是与我的问题相关的列:
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBlanks FixedLenNullInSource Collation
id int no 4 10 0 no (n/a) (n/a) NULL
val varchar no 15 yes no yes SQL_Latin1_General_CP1_CI_AS
我想在val 列中返回包含A-Z、a-z、0-9、(空格)和_ 以外的字符的行。
样本数据:
INSERT INTO tabl
(id, val)
VALUES (1, 'Extemporè'),
(2, 'Aâkash'),
(3, 'Driver 12'),
(4, 'asd'),
(5, '10'),
(6, 'My_Car'),
(7, 'Johnson & Sons'),
(8, 'Johan''s Service'),
(9, 'Indus Truck')
预期输出:
id val
-- -----------
1 Extemporè
2 Aâkash
7 Johnson & Sons
8 Johan's Service
我发现了类似的问题here,但它也没有给出预期的结果:
SELECT *
FROM tabl
WHERE val LIKE '%[^A-Z0-9 _]%'
给出结果:
id val
-- ----------
7 Johnson & Sons
8 Johan's Service
【问题讨论】:
-
SELECT * FROM tbl where PATINDEX('%[^a-zA-Z0-9 _]%',Col) > 0
-
@knkarthick24 它给出的结果与我的查询相同,而不是返回 id 为 1 和 2 的行。
-
你得到了哪些你认为不应该得到的结果?你的排序是什么?试试
WHERE val LIKE '%[^a-zA-Z0-9 _]%' COLLATE Latin1_General_CI_AI。其实你可以用'%[^A-Z0-9 _]%' -
@BaconBits 排序信息在列信息框中给出。我试过你的查询,它也给出了相同的结果。已编辑问题,建议您使用
'%[^A-Z0-9 _]%'。 -
Here 是一个类似的问题。
标签: sql sql-server-2008 tsql