Postgresql: объединение regexp_split_to_table в одну строку

#postgresql

#postgresql

Вопрос:

В Postgresql мне нужно взять строку ASCII типа CNR39XL и превратить ее в число типа 21317392311 (значения ASCII — 65, но цифры оставлены как есть). Это делается для того, чтобы использовать некоторую логику в нашем программном обеспечении и перенести ее на уровень базы данных. Я частично справляюсь с этим:

 ourdb=> SELECT CASE
ourdb->          WHEN ASCII(c) < 65 THEN c::integer
ourdb->          ELSE                    ASCII(c)-65
ourdb->        END
ourdb->   FROM regexp_split_to_table('CNR39XL','') s(c);
 case
------
    2
   13
   17
    3
    9
   23
   11
(7 rows)
  

Однако я не могу понять, как взять этот конечный набор чисел и преобразовать его в строку. Что я ищу?

Ответ №1:

Используйте string_agg

 SELECT CAST(
          string_agg(
             CAST (CASE ... END AS text),
             ''
          )
       AS numeric)
FROM ...