我需要一个函数来连接 SQL Server 中的 2 个数字
例如
getuserid(3,333) = 3333
getuserid(8,5) = 8005
getuserid(2,11) = 2011
它应该根据第二个参数的长度返回结果(如第三个示例)
我尝试将其转换为字符串并使用案例语句将其连接起来。但是,我觉得,这可以在数学上以更有效的方式完成。任何人都可以请建议一种方法。?
顺便说一句,返回的输出应该是数字类型。!
我需要一个函数来连接 SQL Server 中的 2 个数字
例如
getuserid(3,333) = 3333
getuserid(8,5) = 8005
getuserid(2,11) = 2011
它应该根据第二个参数的长度返回结果(如第三个示例)
我尝试将其转换为字符串并使用案例语句将其连接起来。但是,我觉得,这可以在数学上以更有效的方式完成。任何人都可以请建议一种方法。?
顺便说一句,返回的输出应该是数字类型。!
看起来会这样做:
select num1 * 1000 + num2
为什么这个简单的数学需要一个函数?
试试这个——
CREATE FUNCTION dbo.concat_num (@a INT, @b INT)
RETURNS INT
AS BEGIN
RETURN CONVERT(INT, CONVERT(VARCHAR(25), @a) + REPLICATE('0', CASE WHEN LEN(@b) > 2 THEN LEN(@b) ELSE 3 END - LEN(@b)) + CONVERT(VARCHAR(25), @b))
END
输出:
-----------
3333
-----------
8005
-----------
2011
-----------
15555
正如你的问题中提到的
....它应该根据第二个参数的长度返回结果.....
这意味着可能你的意思是
getuserid(3,333) = 3333
getuserid(8,5) = 85
getuserid(2,11) = 211
我在 10 上使用LEN()
了第二个参数和Power()
函数
CREATE FUNCTION dbo.concat_num (@a INT, @b INT)
RETURNS INT
AS BEGIN
RETURN @a * POWER(10,LEN(@b)) + @b
END
我对@Devrat提供的上述解决方案几乎没有修改,因为我只想连接值而不是在它们之间添加000,如果第二个数字是0,它将只返回第一个数字
Create FUNCTION dbo.concat_num (@a INT, @b INT)
RETURNS INT
AS BEGIN
IF @b = 0
BEGIN
RETURN @a
END
ELSE
BEGIN
RETURN CONVERT(INT, CONVERT(VARCHAR(2), @a) + CONVERT(VARCHAR(2), @b))
END
RETURN 0
END