對不起,如果這個問題不清楚。簡短的故事是,我們有人犯了一些錯誤,導致了一個非常討厭的數據損壞問題。最終的結果是,我們結束了一堆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