Ответ 1
Я думаю, что самый простой способ - это регулярное выражение:
select '12.41212' ~ '^[0-9\.]+$'
=> true
select 'Service' ~ '^[0-9\.]+$'
=> false
Может ли кто-нибудь сказать мне запрос, чтобы проверить, является ли строка числом (двойная точность). Он должен возвращать true, если строка - это число. иначе он должен вернуть false.
рассмотрим:
s1 character varying;
s2 character varying;
s1 ='12.41212' => should return true
s2 = 'Service' => should return false
Я думаю, что самый простой способ - это регулярное выражение:
select '12.41212' ~ '^[0-9\.]+$'
=> true
select 'Service' ~ '^[0-9\.]+$'
=> false
Я исправил регулярное выражение, предложенное a_horse_with_no_name.
SELECT '12.41212' ~ '^\d+(\.\d+)?$'; #true
SELECT 'Service' ~ '^\d+(\.\d+)?$'; #false
Я хотел бы предложить другое предложение, так как 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
Если вы хотите проверить с экспоненциальной, + / -. тогда лучшее выражение:
^[-+]?[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]+$';