SQL存储过程中的A-Z循环

问题描述:

对于项目,我必须遍历字母表并针对数据库中的某些值运行每个字母的搜索。该函数将返回每个字母的匹配数量。SQL存储过程中的A-Z循环

我希望能够在SQL存储过程中做到这一点,但我不确定如何在SP中执行'FOR letter = A to Z'循环。有谁知道如何做到这一点?

+4

简单的方法,创建表 “字母表”,并以A到Z填充它? – 2013-03-26 11:48:53

+0

感谢您的回复。在这种情况下,这不起作用,但不幸的是。 – Mark 2013-03-26 11:52:33

+3

@Mark,为什么不呢?看起来像一个合理的解决方案,可能比循环更好。 – usr 2013-03-26 11:55:16

使用从65(A)到90(Z)的循环,并使用T-SQL CHAR() function

当然,我假设你正在使用SQL Server数据库。如果没有,请发布您正在使用的数据库。

+0

完美,它做到了 - 我不知道这个函数在SQL中!非常感谢大家的帮助。 – Mark 2013-03-26 12:07:14

您需要使用“group by”,并可能在查询中包含“count”。你可以在这里找到更多的信息http://msdn.microsoft.com/en-us/library/ms177673.aspx

如果你只需要英文字母,你可以从65(ascii for A)和90(z)开始并使用char letter = (char)i来得到这个字母。

如果您还需要非英语的话,只需设置一个网络配置设置“ABC ...... Z”并循环播放。

+0

这工作 - 非常感谢您的帮助! – Mark 2013-03-26 12:09:26

;WITH Alphabet AS 
(
    SELECT CHAR(65) AS Letter, 65 AS Code 
    UNION ALL 
    SELECT CHAR(Code + 1), Code + 1 
    FROM Alphabet 
    WHERE Code < 90 
) 

SELECT Letter 
FROM Alphabet 

with ATable(c) as 
(
    select cast('A' as CHAR(1)) as c 
    union all 
    select CHAR(ASCII(c)+1) as C from ATable where C<'Z' 

) 
select * from ATable 

SQLFiddle demo

WITH alpha AS 
(
    SELECT 65 AS c 
    UNION ALL 
    SELECT c + 1 FROM alpha 
    WHERE c < 90 
) 
SELECT CHAR(c) FROM alpha