Типи

TO_NUMBER

Перетворює на число текст, записаний «по-людськи»: з комами, знаком валюти.

Синтаксис

TO_NUMBER(<текст>, '<формат>')

Формат описує, що де стоїть: 9 — цифра, , чи G — роздільник тисяч, . чи D — десяткова крапка, а решта символів, як-от $, пропускається. Якщо текст — просто число на кшталт '42.5', TO_NUMBER не потрібен: досить CAST чи ::numeric.

Кома між тисячами
SELECT TO_NUMBER('12,345.67', '99,999.99') AS amount;
amount
12345.67
Зі знаком валюти
SELECT TO_NUMBER('$1,250.00', '$9,999.99') AS price;
price
1250.00
Проти CAST
SELECT CAST('42.5' AS numeric) AS simple_cast,
TO_NUMBER('1,234.5', '9,999.9') AS with_format;
simple_castwith_format
42.51234.5

CAST упорається лише з «чистим» числом, а для 1,234.5 потрібен формат.

Зверни увагу

CAST('12,345.67' AS numeric) дасть помилку invalid input syntax for type numeric — для запису з комами потрібен TO_NUMBER.

Формат має вміщати всі цифри, інакше зайве мовчки відкинеться: TO_NUMBER('12345', '999') дає 123 без жодної помилки.

G і D залежать від мовних налаштувань сервера: десь роздільник тисяч — пробіл чи крапка. Для передбачуваності пиши , і . прямо у форматі.

Схожі функції