@David138

Как преобразовать разные типы данных в одном столбце postgresql?

Есть такой столбец в таблице
Значение
6
70
4,1
342
5
30.84
98
78
Отриц.
95.3
4
67
14
1,4
5
42
3
-
398
347
0,3
26
Положит.
0
5
4
+
3
6
202
0
Положительно
40
2
20
91
Отр

У него тут тип varchar. но есть еще один столбец с типом numeric.
0.00
0.00
0.00
150.00
3.30
40.00
64.00
40.00
NULL
62.00
0.00
64.00
40.00
0.00
0.00
0.00
0.00
NULL
150.00
150.00
0.00
0.00
NULL
0.00
3.30
0.00
NULL
0.00
0.00
150.00
0.00
NULL
39.00
2.00
5.00
40.00

Нужно тут сравнить два столбца на больше или меньше, но из-за того что разные типы, он ругается на ошибку типа. Как преобразовать типы, и нужно ли делать тут подзапросы?
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
4.2.9. Type Casts

CREATE OR REPLACE FUNCTION tonum(num text) RETURNS numeric
LANGUAGE plpgsql
AS $$
DECLARE
BEGIN
	BEGIN
		return regexp_replace(coalesce(num, '0'), '[^0-9,]+', '')::numeric;
	EXCEPTION
	WHEN OTHERS
  THEN
        return 0;
  END;
END;
$$;

select tonum('Отриц.');


будет возвращать 0 при всех не прописанных случаях
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы