对这个简单的查询非常恼火......
我需要为一个varchar添加一个偏移量,如果它是一个数字并且什么也不做,那就不是
出于这个原因,我在SQL-server中创建了以下函数。
然后我提取答案:
select dbo.OffsetKPL("100",200)
但是这不起作用,我收到错误
Msg 207,Level 16,State 1,Line 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不接受变量。
答案 0 :(得分: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。