sql-server – IsNumeric在SQL Server中不起作用

对这个简单的查询非常恼火……
我需要为一个varchar添加一个偏移量,如果它是一个数字而什么也不做,那就不是.
出于这个原因,我在SQL-server中创建了以下函数.
然后我提取答案:
选择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不接受变量.

最佳答案
对字符串使用单引号!

select dbo.OffsetKPL('100',200)

如果你有QUOTED_IDENTIFIER(默认),双引号中的东西应该是对象名称.

虽然各种意想不到的东西都会为此返回1,但是isnumeric可能不是你需要的.

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

有关这一点的一些讨论,请参见IsNumeric() Broken? Only up to a point.

转载注明原文:sql-server – IsNumeric在SQL Server中不起作用 - 代码日志