Запрос Postgres для проверки строки - это число

Может ли кто-нибудь сказать мне запрос, чтобы проверить, является ли строка числом (двойная точность). Он должен возвращать true, если строка - это число. иначе он должен вернуть false.

рассмотрим:

       s1 character varying;
       s2 character varying;

       s1 ='12.41212' => should return true
       s2 = 'Service' => should return false

Ответ 1

Я думаю, что самый простой способ - это регулярное выражение:

select '12.41212' ~ '^[0-9\.]+$'
=> true

select 'Service' ~ '^[0-9\.]+$'
=> false

Ответ 2

Я исправил регулярное выражение, предложенное a_horse_with_no_name.

SELECT '12.41212' ~ '^\d+(\.\d+)?$'; #true
SELECT 'Service' ~ '^\d+(\.\d+)?$'; #false

Ответ 3

Я хотел бы предложить другое предложение, так как 12a345 возвращает true при ответе ns16.

SELECT '12.4121' ~ '^\d+(\.\d+)?$'; #true
SELECT 'ServiceS' ~ '^\d+(\.\d+)?$'; #false
SELECT '12a41212' ~ '^\d+(\.\d+)?$'; #false
SELECT '12.4121.' ~ '^\d+(\.\d+)?$'; #false
SELECT '.12.412.' ~ '^\d+(\.\d+)?$'; #false

Ответ 4

Если вы хотите проверить с экспоненциальной, + / -. тогда лучшее выражение:

^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$

в результате чего:

select '12.41212e-5' ~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$' ;

как правда.

Выражение от: https://www.regular-expressions.info/floatingpoint.html

Вы можете проверить другие типы чисел, например, если вы ожидаете десятичную, со знаком.

 select '-12.1254' ~ '^[-+]?[0-9]*\.?[0-9]+$';