首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查字符串是否仅包含数字。

检查字符串是否仅包含数字。
EN

Stack Overflow用户
提问于 2016-06-01 18:33:56
回答 5查看 51K关注 0票数 15

我试图检查string是否只包含以下格式的有效数字

代码语言:javascript
复制
123.456
123
.356

但它应该拒绝任何包含非数字的东西,包括双点。以下是一些无效的格式

代码语言:javascript
复制
d123.456
123d
12d3
d.1256
12d.456
12.d12
12.d45d
12.45.56

我做了以下工作

代码语言:javascript
复制
SELECT CASE WHEN '123.00' NOT LIKE '%[^0-9.]%' THEN 'Valid' ELSE 'Invalid' END

除了字符串中有多个点的情况外,其他情况都是可行的。

如何将正则表达式调整为只允许一个点,否则返回“无效”?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-01 18:39:48

我建议try_convert()

代码语言:javascript
复制
select (case when try_convert(col, float) is not null then 'valid' else 'invalid' end)

一个可能的缺点是指数格式;例如,1e6是一个有效的数字。

另一种选择是where方法;您只需要更完整的逻辑:

代码语言:javascript
复制
select (case when col like '%[^0-9.]%' then 'invalid'
             when col like '%.%.%' then 'invalid'
             else 'valid'
        end)
票数 19
EN

Stack Overflow用户

发布于 2016-06-01 18:37:56

有一个内置于函数中的sql服务器:

代码语言:javascript
复制
Select CASE WHEN isnumeric([fieldname]) THEN 'Valid' ELSE 'Invalid" END
票数 4
EN

Stack Overflow用户

发布于 2016-06-01 18:53:36

TRY_PARSE将允许您将输入值与您决定允许的任何/所有数字数据类型进行比较--例如:

代码语言:javascript
复制
SELECT 
   TRY_PARSE('123.456' as int) as [int],
   TRY_PARSE('123.0' as float) as [float],
   TRY_PARSE('d123.456' as int) as [int],
   TRY_PARSE('d123.456' as float) as [float]

FWIW -- ISNUMERIC经常被建议,当然也是最好的函数名称:-) --但是不像大多数人所期望的那样工作。(它允许数学和货币符号等)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37576308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档