对不起,如果这个问题不清楚。简短的故事是,我们有人犯了一些错误,导致了一个非常讨厌的数据损坏问题。最终的结果是,我们结束了一堆t-sql条目,它们看起来有如下效果:'value,value,value'和'this,是一个值,这是一个值',具有几千个变体超过11万条记录受到影响)。T-SQL:如何过滤'ab,ab ab'但不是'ab,ab'?
问题是,我们需要通过使用SQL WHERE子句来匹配包含逗号的项目,这些项目由包含任何字符(或缺少)的字符串包围的字符串中的任何位置使用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
但是,它返回的最后一项错误匹配。有任何想法吗?
正在搜索非规格化数据YUCK ... – 2012-01-17 05:32:15