我有一张这样的表:
studentname marks
B@lu 20
T)m 100
J#hn 45
Tim*@ 20
studentname
列的输出应列出特殊字符数( @,),),#,* )
Type count
@ 2
) 1
# 1
* 1
所以基本上我想计算这些字符在表格中重复的次数,然后在另一张桌子上显示。
特殊字符列表: - !#%& +,。/ :;< => @` {|}〜“()* \ _ \ _ ^ \?[] \''
答案 0 :(得分:1)
以下内容应该这样做。
DECLARE @YourTable TABLE(StudentName VARCHAR(50) NOT NULL );
INSERT @YourTable
(StudentName)
VALUES ('B@lu'),
('T)m'),
('J#hn'),
('Tim*@'),
('-!#%&+,./:;<=>@`{|}~"()*_^?[]\''');
SELECT letter,
COUNT(*) AS [count]
FROM @YourTable
JOIN master..spt_values
ON Type = 'P'
AND number BETWEEN 1 AND LEN(studentname)
CROSS APPLY (SELECT SUBSTRING(StudentName, number, 1)) CA(letter)
WHERE letter LIKE '[!-#%-/:;-?@[-`{-~]' COLLATE Latin1_General_BIN2
GROUP BY letter
ORDER BY [count] DESC
答案 1 :(得分:1)
看看下面的内容......
IF OBJECT_ID('tempdb..#SpecialCharacter', 'U') IS NOT NULL
DROP TABLE #SpecialCharacter;
CREATE TABLE #SpecialCharacter (
SpecialChar CHAR(1) NOT NULL
);
INSERT #SpecialCharacter (SpecialChar) VALUES
('-'), ('!'), ('#'), ('%'), ('&'), ('+'), (','),
('.'), ('/'), (':'), (';'), ('<'), ('='), ('>'),
('@'), ('`'), ('{'), ('|'), ('}'), ('~'), ('"'),
('('), (')'), ('*'), ('\'), ('_'), ('\'), ('^'),
('\'), ('?'), ('['), (']'), ('\'), ('''');
IF OBJECT_ID('tempdb..#Student', 'U') IS NOT NULL
DROP TABLE #Student;
CREATE TABLE #Student (
StudentName VARCHAR(20) NOT NULL
);
INSERT #Student (StudentName) VALUES
('B@lu'),
('T)m%'),
('J#h_n'),
('Tim*@'),
('J@@@&&&oN');
--========================================================
SELECT
sc.SpecialChar,
CharCount = SUM(cc.CharCount)
FROM
#SpecialCharacter sc
JOIN #Student s
ON s.StudentName LIKE '%' + sc.SpecialChar + '%'
CROSS APPLY ( VALUES (LEN(s.StudentName) - LEN(REPLACE(s.StudentName, sc.SpecialChar, '')) ) ) cc (CharCount)
GROUP BY
sc.SpecialChar
HAVING
SUM(cc.CharCount) > 0;
结果...
SpecialChar CharCount
----------- -----------
# 1
% 1
& 3
) 1
* 1
@ 5
_ 1
答案 2 :(得分:0)
假设有一个表格,其中包含所有感兴趣的特殊字符TableSpecialChar
select a.char 'type', count(*) 'Count' from TableSpecialChar a
inner join TableStudent b on b.name like '%['+a.char+']%'
group by a.char