在Redshift

时间:2018-09-18 21:47:08

标签: postgresql amazon-redshift

Amazon Redshift中是否有一种方法可以将varchar列(具有A,B,D,M等值)转换为整数(A表示1,B表示2,C表示3等)?我知道Teradata具有类似ASCII()的功能,但是在Redshift中不起作用。

注意:我的目标是将varchar列转换为查询中的数字,然后比较这两列以查看数字是否相同。

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle


Postgres

SELECT 
    ascii(upper(t.letter)) - 64
FROM
    table t

说明:

  • upper()输入大写字母(以处理大写字母和非大写字母的不同ascii值)
  • ascii()将字母转换为ASCII code。大写字母从65开始。
  • 将输入减小64,以从ASCII起始点== 65降为1

Redshift

在Redshift(https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_functions_leader_node_only.html)上,ascii()函数被标记为不推荐使用

因此,一种可行的(更实用的)解决方案是获取固定的字母字符串并给出给定字母的索引:

SELECT 
    letter, 
    strpos('ABCDEFGHIJKLMNOPQRSTUVWXYZ', upper(t.letter))
FROM 
    table t