Преобразовать строку varchar в формат валюты в db2 SQL - PullRequest
0 голосов
/ 04 марта 2020

У меня есть столбец, из которого я должен извлечь строку, а затем отформатировать ее обратно в формате валюты США с двумя десятичными знаками.

Например: Значение столбца: {tag}0000020000890|

Из этого я должен сопоставить тег и извлечь 20000890 и отформатировать его в 200,008.90

Я извлек часть с кодом ниже:

LTRIM(REGEXP_SUBSTR('match pattern', 1,1,'i',,1), '0')

Где образец соответствия is '\{tag\}(.*?)\|'

С этим я могу извлечь 20000890

И затем я попробовал приведенные ниже функции to_char и to_number сверху, чтобы отформатировать как разделенную запятыми валюту с двумя десятичными знаками баллов.

to_char(ltrim(Regexp_substr('match pattern',1,1,'i',1),'0'), '99G999G999D99')

Но это выдает ошибку ниже:

Sql ошибка -20447, sqlstate 22007 sqlerrm c 99G999G999D99 Sysibm.Varchar-format

Тогда я попытался,

to_char(to_number(ltrim(Regexp_substr('match pattern',1,1,'i',1),'0')), '99G999G999D99')

Но это также выдает ошибку:

Sql Ошибка -20476, sqlstate 22018 sqlerm c DECFLOAT_FORMAT; 99G999G999D99

Я не уверен, что вызывает эту ошибку.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Поддерживаемый формат поддерживается только начиная с V11.5.
TO_CHAR V11.5
TO_CHAR V11.1
Сравните Table 2. Format elements for decimal floating-point to varchar таблица из обеих ссылок.

Более того, вы должны привести строку к числовому значению c в 1-м параметре TO_CHAR:

SELECT TO_CHAR(DECFLOAT(REGEXP_SUBSTR(V, '\{tag\}(.*?)\|', 1, 1, 'i', 1)), '99,999,999.99') 
FROM (VALUES '{tag}0000020000890|') T(V);
0 голосов
/ 04 марта 2020

Взгляните на VARCHAR_FORMAT . Это функция TO_CHAR отображается на. Разделителем группы является не G, а «,» или «.». По сути, вам нужно заменить строку форматирования 99G999G999D99 на что-то вроде 99,999,999.99.

В документации по Db2 есть еще несколько примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...