申し訳ありませんが、この質問が明確でない場合。簡単な話は、誰かに間違いを犯させて、データ破損の問題がかなり厄介なものになったということです。最終的には、「値、値、値」と「これは値です、これは値です」という数千のバリエーションを持つt-sqlエントリがいくつかあります。 110kを超えるレコードに影響を与えました)。T-SQL: 'ab、ab ab'はフィルタリングしますが、 'ab、ab'はフィルタリングしませんか?
問題は、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
。何か案は?
私はあなたがちょうどあなたの '%' と '[^]' のあなたの最初のPatIndex
に間違った方法を中心に切り替わったと思い
非正規化データを検索すると、YUCK ... –