我们是否允许在SUBSTRING中使用CASE?

时间:2014-05-29 13:10:51

标签: sql postgresql

(这是我在工作中遇到的实际难题的一个更为简单的案例)

假设我有一张名为'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

我会运行什么查询来解决此问题?

谢谢!

2 个答案:

答案 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