首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL IsNumeric函数

SQL IsNumeric函数
EN

Stack Overflow用户
提问于 2018-08-22 19:17:04
回答 2查看 95关注 0票数 2
代码语言:javascript
复制
SELECT IsNumeric('472369326D4')

返回1。显然,字符串中有一个aphabet D。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 19:22:52

472369326D4是一个有效的float类型。D被转换为添加四个0值,有效地将D字符之前的值乘以10000

示例Sql

代码语言:javascript
复制
SELECT cast('472369326D4' as float) 
SELECT cast('472369326D3' as float) 
SELECT cast('472369326D2' as float) 

输出:

代码语言:javascript
复制
4723693260000
472369326000
47236932600
票数 10
EN

Stack Overflow用户

发布于 2018-08-22 19:28:49

你可能想要这样的逻辑:

代码语言:javascript
复制
(case when str not like '%[^0-9]%' then 1 else 0 end) as isNumeric

或者,如果您想要允许小数和负号,那么逻辑就更麻烦了:

代码语言:javascript
复制
(case when str not like '%.%.%' and str not like '%[^.0-9]%' and
           str not like '-%[^.0-9]%'
      then 1 else 0
 end)

我强烈建议不要使用isnumeric()。它会产生奇怪的结果。除了“d”,“e”也是允许的。

在Server 2012+中,您可以尝试以下操作:

代码语言:javascript
复制
select x, isnumeric(x), try_convert(float, x)
from (values ('$'), ('$.'), ('-'), ('.')) v(x)

所有这些都返回1表示isnumeric,而返回NULL表示转换,这意味着不能将值转换为浮点数。(您可以使用convert()运行Server 2008中的代码,然后看着代码失败。)

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

https://stackoverflow.com/questions/51973704

复制
相关文章

相似问题

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