(这是我在工作中遇到的实际难题的一个更为简单的案例)
假设我有一张名为'a'的表,其中有两列名为'col'和amp; 'foo'具有以下值:
col|foo A3 | f D2 | f
我想使用一个select语句输出两个名为'letter'和'number'的列,其中'letter'是'col'的第一个字符,但每个字母在Alphabet中向右移动,'number'是'col'的第二个字符,但每个数字向下移动1;除了'foo'列。这是理想的输出:
letter|number|foo B | 2 | f E | 1 | f
我会运行什么查询来解决此问题?
谢谢!
答案 0 :(得分:0)
你可以做你想做的事:
select chr(ascii(left(col, 1)) - 1) as letter,
chr(ascii(substr(col, 2, 1)) - 1) as number,
foo
这使用ascii()
函数获取字符的ASCII值,然后使用chr()
函数将其转换回字符。如果您想要Number
作为数字,而不是字符:
select chr(ascii(left(col, 1)) - 1) as letter,
(ascii(substr(col, 2, 1)) - ascii('0') - 1) as number,
foo
答案 1 :(得分:0)
您可以这样使用:
SELECT CASE
WHEN Substring(col, 1, 1) = 'z' THEN 'a'
WHEN Substring(col, 1, 1) = 'Z' THEN 'A'
ELSE Char(CONVERT(NUMERIC, Ascii(Substring(col, 1, 1)))+ 1)
END AS letter,
CONVERT(NUMERIC, Substring(col, 2, 1)) - 1 AS number,
foo
FROM a