Косяк при преобразовании текста в число, Почему теряются разряды?
В таблице есть столбец с идентификаторами вида YYMM.DD№№
2101.1601#
2101.1602#
2101.1701#
т.е. это дата плюс двузначное число. Мне нужно создать новый идентификатор на определённую дату.
Регуляркой выбираю последние 3 цифры из идентификаторов за опред дату напр 16.01.2021
SELECT REGEXP_MATCHES(номСделки, '\d\d\d(?=\D*$)', 'g')
FROM db.Сделки
WHERE номСделки ~ '2101\.16';
получаю набор: ( кстати что значат эти фиг скобки при выводе? )
{601}
{602}
теперь мне нужно изменит их тип на integer.
Пробовал to_number( val, '999' ); Почему то возвращает 60 вместо 601 куда-то девается один разряд.
Если пишу вручную to_number( '601', '999' ); результат правильный,
Если пишу вручную со скобками как в рез выборки to_number( '{601}', '999' );
то опять получаю такой же косяк 60 вместо 601. В чём дело?
Вот функция
CREATE OR REPLACE FUNCTION db.extract_nom(integer)
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE
id_Сделки ALIAS FOR $1;
output integer;
reg text;
row_data text;
BEGIN
SELECT to_char( датаЗаявки, 'YYMM\.DD') INTO reg FROM db.Сделки WHERE id=id_Сделки;
--Перебор результатов запроса.
FOR row_data IN SELECT REGEXP_MATCHES(номСделки, '\d\d\d(?=\D*$)', 'g') FROM "db"."Сделки"
WHERE "номСделки" ~ reg ORDER BY "номСделки" DESC LOOP
output := to_number(row_data[1], '000');
END LOOP;