客户希望根据计数附加一个带有文字增量的字段。
范围从“ aa ”到“ zz ”。
“ aa ”表示计数为1,“ zz ”表示范围内的最大值: 676
我有几乎可以工作的 sql,但希望能有专家帮助我克服最后一道障碍。
--Constants
DECLARE @START_ASCII INT = 97
DECLARE @ASCII_OFFSET INT = 1
DECLARE @ALPHABET_LETTER_COUNT INT = 26
--Variables
DECLARE @RecordCount INT = 0
DECLARE @FirstLetter VARCHAR(1) = NULL
DECLARE @SecondLetter VARCHAR(1) = NULL
SET @RecordCount = 1 --Range is 1 to 676 (e.g. 'aa' to 'zz')
SET @FirstLetter = CHAR(round(@RecordCount / @ALPHABET_LETTER_COUNT, 2, 1) + @START_ASCII)
SET @SecondLetter = CHAR((((@RecordCount - @ASCII_OFFSET) % @ALPHABET_LETTER_COUNT) + @START_ASCII))
SELECT @FirstLetter + @SecondLetter
上面sql的问题涉及到第一个字母。它一直有效,直到第二个字母到达字母表的末尾。例如,计数为26时,我希望得到 ' az ',但得到的是 ' bz '。
我想保持 SQL 小而紧凑(例如没有 CASE 语句)。我可以对上面的代码进行一些小调整以使其正常工作吗?
或者,如果有更聪明的方法给这只猫剥皮,我想知道。