如果这个问题不清楚,很抱歉。简短的故事是,我们有人犯了一些错误,导致了一个相当糟糕的数据损坏问题。最终的结果是,我们最终得到了一堆t-sql条目,它们看起来类似于:“value,value,value”和“this,is a value,this is a value”,它们有几千种不同(超过110k条记录受到影响)。
问题是,我们需要使用SQL WHERE子句来匹配包含逗号的项,这些项位于字符串中除空格以外的任何字符(或缺少字符)的任何位置。作为示例,我创建了一些下面的项表,其中包含一个位,指示查询是否应该返回给定的项。
DECLARE @Ttests Table (
toMatch varchar(4000),
shouldMatch bit
)
INSERT INTO @Ttests
VALUES
('value1,value2,value3,value1,value2,value3', 1),
('value1, value2, value3', 0),
(',value1, value2, value3', 1), --starts with a comma
('value1, value2,value2', 1),
('this, is a sentence,this, is a sentence', 1),
('value1, value2, value3,', 1), -- ends in a comma
('value1 ,value2, value3', 0);今晚我能得到的最接近的信息是这样的:
SELECT
*
FROM @Ttests
WHERE PatIndex('[^ ]%,[^ ]%', toMatch) > 0
OR PatIndex(',%', toMatch) > 0
OR PatIndex('%,', toMatch) > 0但是,它在最后一项上返回一个假匹配。有什么想法吗?
发布于 2012-01-17 13:36:28
我想你的'%‘和'^’在你的第一个PatIndex中换错了方向
SELECT
*
FROM @Ttests
WHERE PatIndex('%[^ ],[^ ]%', toMatch) > 0
OR PatIndex(',%', toMatch) > 0
OR PatIndex('%,', toMatch) > 0发布于 2012-01-17 13:40:45
尝试以下操作:
SELECT *
FROM @Ttests
WHERE
(
toMatch LIKE '%[^ ],[^ ]%'
OR toMatch LIKE ',[^ ]%'
OR toMatch LIKE '%[^ ],'
)或几乎相同:
SELECT *
FROM @Ttests
WHERE
PatIndex('%[^ ],[^ ]%', toMatch) > 0
OR PatIndex(',[^ ]%', toMatch) > 0
OR PatIndex('%[^ ],', toMatch) > 0https://stackoverflow.com/questions/8890089
复制相似问题