计算SQL中的特殊字符

时间:2017-05-04 12:05:54

标签: sql-server

查找返回特定列中使用的所有特殊字符数的SQL查询。假设在一列中有5行,每行使用两个特殊字符。我正在寻找一些给出10作为结果的查询。

我试图获取特殊字符行,但是如何获取同一表中所有数据库的每个特殊字符的计数(我在同一个表和同一列中有10个数据库)

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

1 个答案:

答案 0 :(得分: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