在SQL Server中,IsNumeric函数无法正常工作。

3
很烦恼这个简单的查询...
如果一个变量是数字,我需要给它加上偏移量,否则就不做任何处理。
为此,我在SQL Server中创建了以下函数。 然后通过以下方法提取答案: select dbo.OffsetKPL("100",200) 但是这并不起作用,我收到错误信息:
Msg 207, Level 16, State 1, Line 1 Invalid column name '100'.
该函数的代码如下...
ALTER FUNCTION [dbo].[OffsetKPL](
  @kpl varchar(20)
  ,@offset int = 0
)
RETURNS varchar(20)
AS
BEGIN   
  DECLARE @uitkomst varchar(20);

  set @uitkomst = @kpl;
  if not(@offset = 0) begin
    if (IsNumeric(@uitkomst) = 1) begin
      set @uitkomst = cast((cast(@kpl as int) + @offset) as varchar);
    end;
end;

RETURN @uitkomst;

END

“怎么了?没有说明IsNumeric不接受变量。”
1个回答

7

使用单引号表示字符串!

select dbo.OffsetKPL('100',200)

如果你开启了QUOTED_IDENTIFIER(默认情况下),双引号中的内容被视为对象名。

然而,isnumeric可能并不是你需要的,因为各种意外的内容都会返回1

SELECT ISNUMERIC('$'), ISNUMERIC('.'), 
       ISNUMERIC('12d5'), ISNUMERIC(','), ISNUMERIC('1e1')

关于这一点的讨论,请参见IsNumeric()函数是否存在问题?只存在某些情况下


没错,这个可以用,我之前卡了好久,不过这就是我摘下锡纸帽子的代价。 - Johan
1
我知道IsNumeric的错误状态,但是对于我需要它的目的来说,我从未考虑过这些问题,通常在MySQL中工作。 - Johan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接