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

新手上路,请多包涵

我正在尝试检查 string 是否仅包含以下格式的有效数字

123.456
123
.356

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

d123.456
123d
12d3
d.1256
12d.456
12.d12
12.d45d
12.45.56

我做了以下

SELECT CASE WHEN '123.00' NOT LIKE '%[^0-9.]%' THEN 'Valid' ELSE 'Invalid' END

除了字符串中有多个点的情况外,何时似乎有效。

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

原文由 Junior 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

我建议 try_convert()

 select (case when try_convert(col, float) is not null then 'valid' else 'invalid' end)

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

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

 select (case when col like '%[^0-9.]%' then 'invalid'
             when col like '%.%.%' then 'invalid'
             else 'valid'
        end)

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

有一个内置的 sql server 函数:

 Select CASE WHEN isnumeric([fieldname]) THEN 'Valid' ELSE 'Invalid" END

原文由 Matt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进