2017-05-04 69 views
-2

尋找一個SQL查詢,該查詢返回特定列中使用的所有特殊字符的計數。假設列中有5行,每行使用兩個特殊字符。我正在查找一些結果爲10的查詢。在SQL中計算特殊字符

我試圖讓特殊字符的行,但如何讓每個特殊字符計數在同一個表中的所有數據庫(我在同一個表和相同的列10個數據庫)

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

Do y你想要所有行中的特殊字符的數量,還是其中一個字段中具有特殊字符的行數? –

+0

添加示例數據與預期結果 – 2017-05-04 12:24:29

+0

如果名稱是證明_7'日期,那麼我需要兩行,因爲這裏我們有兩個特殊字符。第一行名稱列和特殊字符列是'_',第二行是'''單引號 – Mallikarjuna

回答

1

於是我就用一個數字表格(在CTE中虛擬創建),並與您的表格交叉使用,每次查看每個角色1並查看它是否符合您的匹配條件。那麼我算的行數退回來獲得特殊字符數:

設立

--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 - 第二行dgas-!gfsdfg!像這剩下的兩行也 – Mallikarjuna

+1

@Mallikarjuna修復你的問題,不要用代碼將它拖出一堆評論。在那裏添加您的示例數據和所需輸出,並刪除您的評論。請。 –