查找返回特定列中使用的所有特殊字符数的SQL查询。假设在一列中有5行,每行使用两个特殊字符。我正在寻找一些给出10作为结果的查询。
我试图获取特殊字符行,但是如何获取同一表中所有数据库的每个特殊字符的计数(我在同一个表和同一列中有10个数据库)
Select * From tablename Where Name like '%[^a-z ,-.''0-9]%'
答案 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