首页 > 解决方案 > SQL Server 根据字母扩展行

问题描述

我在 SQL Server 中有一个如下所示的表:

在此处输入图像描述

我想知道是否有一种方法可以通过 T-SQL 将此表扩展为以下?

在此处输入图像描述

我搜索了几乎所有关于扩展日期或数值的讨论。我想知道是否有办法按字母扩展?谢谢!

我试过在 SQL 中比较字母,像这样,T-SQL 会识别字母的顺序:

DECLARE @code varchar(3) = 'G0C'
DECLARE @start varchar(3) = 'G0W'
DECLARE @end varchar(3) = 'G0Z'

SELECT 
    CASE 
        WHEN @code >= @Start AND @code <= @end 
            THEN 'True' 
            ELSE 'False' 
    END

但是,如果我想为字母增加 1,则不允许varchar+1。我考虑过转换为 ASCII,然后再将其转换回来,但这会显着影响性能(展开前的表大约有 3000 行)?

标签: sql-server

解决方案


您可以使用内联计数表

SELECT
  CODE = LEFT(t.[FROM], 2) + v.chr,
  t.ZONE
FROM YourTable t
JOIN (VALUES
    ('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')
) v(chr) ON v.chr BETWEEN SUBSTRING(t.[FROM], 3, 1) AND SUBSTRING(t.TO, 3, 1)

这只处理最后一个字符。对整个字符串执行此操作更复杂


推荐阅读