【问题标题】:A-Z loop in SQL Stored ProcedureSQL 存储过程中的 A-Z 循环
【发布时间】:2013-03-26 11:47:35
【问题描述】:

对于一个项目,我必须遍历字母表并针对数据库中的某些值搜索每个字母。该函数将返回每个字母的匹配数。

我希望能够在 SQL 存储过程中执行此操作,但我不确定如何在 SP 中执行“FOR 字母 = A 到 Z”循环。有谁知道如何做到这一点?

【问题讨论】:

  • 最简单的方法,创建一个“字母表”并用 A 到 Z 填充它?
  • 感谢您的回复。不幸的是,这在这种情况下是行不通的。
  • @Mark,为什么不呢?似乎是一个合理的解决方案,它的性能可能比循环更好。

标签: asp.net sql stored-procedures


【解决方案1】:

如果您只需要英文字符,则取决于字母表,您可以从 65(ascii 表示 A)和 90(Z)循环并使用 char letter = (char)i 来获取字母。

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

【讨论】:

    【解决方案2】:
    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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 完美,做到了——我不知道函数在 SQL 中!非常感谢大家的帮助。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
        ;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
        

        【讨论】:

          【解决方案6】:
          WITH alpha AS
          (
              SELECT 65 AS c
              UNION ALL
              SELECT c + 1 FROM alpha
              WHERE c < 90
          )
          SELECT CHAR(c) FROM alpha
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-19
            相关资源
            最近更新 更多