2017-05-04 11 views
-2

特定の列で使用されているすべての特殊文字の数を返すSQLクエリを検索します。列に5行あり、それぞれ2つの特殊文字が使用されているとします。私は結果として10を与えるいくつかのクエリを探しています。SQLの特殊文字のカウント

私は、だから私は使用

Select * From tablename Where Name like '%[^a-z ,-.''0-9]%' 
+0

Do yすべての行の特殊文字の数、またはフィールドの1つに特殊文字を含む行の数が必要ですか? –

+0

期待される結果を持つサンプルデータを追加 –

+0

名前がProof_7 'Dateの場合、ここには2つの特殊文字があるので2行が必要です。最初の行名前列と特別なチャプター列は '_'で、2番目の行は '' 'シングルクォート – Mallikarjuna

答えて

1

を特殊文字列を取得しようとしましたが、どのように同じテーブル内のすべてのデータベースについて、各特殊文字の数を取得する(私は同じテーブルと同じ列に10個のデータベースを持っています)数字のテーブル(CTEで作成されたバーチャル)を作成し、各キャラクターを一度に1つずつ取り出し、一致基準に一致するかどうかを確認しながらテーブルにクロス適用します。

SET UP

--Create Test Table 
CREATE TABLE #Test 
(
    [Name] VARCHAR(50) 
) 
-- Insert Sample Data 
INSERT INTO #Test 
VALUES ('dgas-!gfsdfg'), ('d^0jdn'), (',dfsd%gfs_da') 

クエリ私のデータについては

declare @match varchar(50) = '[^a-z ,-.''0-9]' 

;WITH Numbers 
AS 
(
-- Generate Numbers table 
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS N 
FROM 
    (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) x(n) 
CROSS APPLY 
    (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) y(n) 
) 
SELECT COUNT(*) 
FROM Numbers 
CROSS APPLY #Test 
WHERE N < DATALENGTH(Name) + 1 -- Only need to get each character 
AND SUBSTRING(Name, N, 1) LIKE @match -- does it match our expression 

彼のリターン:私は、行の数は、特殊文字の数を取得するために戻った回数4

+0

上記のテストデータでは、このようなdgas-!gfsdfg - 2行目のdgas-!gfsdfgを入れておく必要があります。この残りの2つの行のようにも – Mallikarjuna

+1

@Mallikarjunaあなたの質問を修正し、コードでコメントの束の中にそれをドラッグしないでください。サンプルデータと希望の出力をそこに追加し、コメントを削除します。お願いします。 –