文字列に 1,2,3,4,5,6,7 のような数字 (文字) が任意の順序で含まれているかどうかを確認する場合のクエリ方法。これは、以下のように、1、2 などの節にAND
ステートメントを記述することで実現できます。LIKE
Where days like '%1%' and days like '%2%' ...... So on
文字列に存在する特定の文字をチェックするクエリはありますか。または、上記の例が短い手のクエリでどのように達成できるか。助けてください。ありがとう。
文字列に 1,2,3,4,5,6,7 のような数字 (文字) が任意の順序で含まれているかどうかを確認する場合のクエリ方法。これは、以下のように、1、2 などの節にAND
ステートメントを記述することで実現できます。LIKE
Where days like '%1%' and days like '%2%' ...... So on
文字列に存在する特定の文字をチェックするクエリはありますか。または、上記の例が短い手のクエリでどのように達成できるか。助けてください。ありがとう。
これを行う 1 つの方法は、検索したいすべての文字列を含むテーブルを作成することです。
例えば
DECLARE @searchstr TABLE (s VARCHAR(10))
INSERT INTO @searchstr VALUES ('1'),('2'),('3'),('4'),('5'),('6'),('7')
DECLARE @tbl TABLE (days VARCHAR(100))
INSERT INTO @tbl VALUES ('1234567'),('123'),('1122334'),('7654321')
SELECT t.days
FROM @tbl t
LEFT JOIN @searchstr s
ON t.days LIKE '%' + s.s+ '%'
GROUP BY t.days HAVING COUNT(DISTINCT s.s) = 7
を調べることをお勧めし[PATINDEX][1]
ます。MSDNから:
すべての有効なテキストおよび文字データ型で、指定された式でパターンが最初に出現する開始位置を返します。パターンが見つからない場合はゼロを返します。
あなたはおそらく次のようなものを使用することになりますWHERE PATINDEX(%[0-9]%', foo) > 0
CHARINDEX を使用できます
CHARINDEX(stringthatcontainschars1, '1', numofpositiontostartlookingat)
Output: 24, the position that your searched for char is at. returns zero if not found
列または文字列で数字の 1 を探している場合は、次のように入力します。
CHARINDEX(columnname, '1', 1)
This would search for '1' beginning at position 1.
0 を返すかどうかに基づいて条件ステートメントを実行して、char が文字列内にあるかどうかを判断し、その後に必要なコードを記述できます。
それらがすべて数字であることを確認するために使用isnumeric
し、1-7 の代わりに 0、8、または 9 をテストします。これは短いためです。
CONTAINS()はうまくいきませんか?
また、単語を char 配列に分割する方法にも注意してください。
日がカンマで区切られている場合は、FIND_IN_SETを使用できます
SELECT FIND_IN_SET(1, days) AND FIND_IN_SET(2, days);
それは違いますが、より良いというわけではありませんが、私の知る限り、他のネイティブな方法はありません。そして、LIKEはおそらくfind_in_setよりもはるかに高速になります