首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL -替换isnumeric =0

TSQL -替换isnumeric =0
EN

Stack Overflow用户
提问于 2018-03-16 13:43:19
回答 4查看 1.2K关注 0票数 0

我有一个select语句,在select语句中有几个列执行基本计算(例如Col1 * 3.14)。但是,有时我会遇到非数字值,当这种情况发生时,整个存储过程会因为一行而失败。

我考虑过使用WHERE ISNUMERIC(Col1) <> 0,但接下来我将排除其他列中的信息。

TSQL中是否有一种将所有刺替换为NULL或0的方法??

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-16 14:31:39

我更喜欢Try_Cast:

代码语言:javascript
复制
SELECT
    someValue
    ,TRY_CAST(someValue as int) * 3.14     AS TRY_CAST_to_int
    ,TRY_CAST(someValue as decimal) * 3.14 AS TRY_CAST_to_decimal
    ,IIF(ISNUMERIC(someValue) = 1, someValue, null) * 3.14 as IIF_IS_NUMERIC
FROM (values 
    ( 'asdf'), 
    ( '2' ),
    ( '1.55')
) s(someValue)
票数 0
EN

Stack Overflow用户

发布于 2018-03-16 13:46:46

就像..。

代码语言:javascript
复制
SELECT blah1, blah2, blah3
   CASE WHEN ISNUMERIC(Col1) = 1 THEN [Col1] * 3.14 ELSE NULL END as whatever
FROM your_table

也可以证明..。

  • 非数字值应该转换为数字值或空值,如果这是列中所期望的,并且
  • 如果需要数字,那么列首先应该是数字数据类型,而不是字符数据类型,这允许这些类型的错误。
票数 3
EN

Stack Overflow用户

发布于 2018-03-16 14:20:57

ISNUMERIC是一种很糟糕的方法,因为有太多的东西被标识为NUMERIC,它们不能乘以非MONEY数据类型。

https://www.brentozar.com/archive/2018/02/fifteen-things-hate-isnumeric/

这很糟糕,因为“-”是个数字.

代码语言:javascript
复制
DECLARE @example TABLE (numerics VARCHAR(10));

INSERT INTO @example VALUES ('-')

SELECT CASE WHEN ISNUMERIC(numerics) = 1 THEN numerics  * 3.14 ELSE NULL END  
FROM @example;

尝试TRY_CAST (尽管修改您的十进制精度以满足您的需要):

代码语言:javascript
复制
DECLARE @example TABLE (numerics VARCHAR(10));

INSERT INTO @example VALUES ('-')

SELECT TRY_CAST(numerics AS decimal(10,2)) * 3.14  FROM @example;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49322240

复制
相关文章

相似问题

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