对这个简单的查询感到非常恼火......
我需要向 varchar 添加一个偏移量,如果它是一个数字并且什么都不做,它不是。
为此,我在 SQL-server 中创建了以下函数。
然后我提取答案:select dbo.OffsetKPL("100",200)
但是这不起作用,我收到错误



该函数的代码如下...

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 on(默认)双引号中的东西应该是对象名称。
isnumeric 可能不是您所需要的,因为各种意想不到的事情都会为此返回 1
SELECT ISNUMERIC('$'), ISNUMERIC('.'),
       ISNUMERIC('12d5'), ISNUMERIC(','), ISNUMERIC('1e1')

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

关于sql-server - IsNumeric 在 SQL 服务器中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5419377/

10-13 08:03