Преобразовать столбец varchar в целое число в Redshift - PullRequest
0 голосов
/ 19 сентября 2018

Есть ли способ в Amazon Redshift преобразовать столбец varchar (со значениями, такими как A, B, D, M) в целое число (1 для A, 2 для B, 3 для C ... и т. Д.)?Я знаю, что у teradata есть что-то вроде ASCII (), но это не работает в Redshift.

Примечание. Моя цель - преобразовать столбцы varchar в число в моем запросе и сравнить эти два столбца, чтобы увидеть, являются ли числаодинаковые или разные.

1 Ответ

0 голосов
/ 19 сентября 2018

demo: db <> fiddle


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

Объяснение:

  • upper() делаетввод заглавными буквами (для обработки различного значения ascii для заглавных и не заглавных букв)
  • ascii() преобразует буквы в ASCII-код .Заглавные буквы начинаются с цифры 65.
  • уменьшает ввод на 64, чтобы перейти от начальной точки ASCII == 65 к 1

Redshift :

Функция ascii() помечена как устаревшая в Redshift (https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_functions_leader_node_only.html)

). Поэтому одно из возможных (и более прагматичных) решений - получить фиксированную строку алфавита и выдать индекс дляданное письмо:

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