2011-03-24 79 views
3

让这个简单的查询变得非常恼火......
我需要添加一个偏移量到一个varchar,如果它是一个数字,并且什么也不做。
因此,我在SQL服务器中创建了以下函数。 我然后提取的答案: select dbo.OffsetKPL("100",200)IsNumeric在SQL服务器中不起作用

然而,这并不工作,我得到的错误

消息207,级别16,状态1,行1
无效的列名 '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

使用“100”而不是“100”? – cairnz 2011-03-24 12:54:47

回答

7

使用单引号字符串!

select dbo.OffsetKPL('100',200) 

如果您对QUOTED_IDENTIFIER(默认值)在双引号的东西预计将对象名称。

isnumeric可能不是你所需要的,因为各种意想不到的事情都会为此返回1

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

的在这一点上一些讨论见IsNumeric() Broken? Only up to a point

+0

是的,那是有效的,我在那里真的有一段时间了,无论如何,这就是我拿掉我的锡纸帽得到的东西。 – Johan 2011-03-24 12:59:26

+1

我知道IsNumeric的borken状态,但为了我的目的,我需要它,因为我从来没有想过“问题,通常在MySQL中工作。 – Johan 2011-03-24 13:15:05