简体   繁体   English

在SQL Server中连接2个数字

[英]Concatenate 2 numbers in SQL Server

I'm in need of a function to concatenate 2 numbers in SQL Server 我需要一个函数来连接SQL Server中的2个数字

eg 例如

getuserid(3,333) = 3333
getuserid(8,5) = 8005
getuserid(2,11) = 2011

It should return the result based on the length of second parameter (like 3rd example) 它应该根据第二个参数的长度返回结果(如第3个例子)

I tried converting it to string and using case statements I concatenated it. 我尝试将其转换为字符串并使用case语句将其连接起来。 But, I feel that,this can be done mathematically in a more effective manner. 但是,我觉得,这可以通过数学方式更有效地完成。 Can anyone please suggest a way.? 任何人都可以建议一种方式。?

By the by, the output returned should be a numeric type.! 通过by,返回的输出应该是数字类型。

Looks like this will do it: 看起来会这样做:

select num1 * 1000 + num2

Why do you need a function for this simple math? 为什么这个简单的数学需要一个函数?

Try this one - 试试这个 -

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

Output: 输出:

-----------
3333
-----------
8005
-----------
2011
-----------
15555

As mentioned in your question 如你的问题所述

.... It should return the result based on the length of second parameter ..... .... 它应该根据第二个参数的长度返回结果 .....

That means probably you meant 这意味着你的意思

getuserid(3,333) = 3333
getuserid(8,5) = 85
getuserid(2,11) = 211

I have used LEN() on second parameter and Power() function on 10 我在第二个参数上使用了LEN() ,在10上使用了Power()函数

CREATE FUNCTION dbo.concat_num (@a INT, @b INT)
RETURNS INT
AS BEGIN

  RETURN  @a * POWER(10,LEN(@b)) + @b

END

I have little modified above solution provided by @Devrat, because I want to just concatenate values rather adding 000 between, and if the second number is 0 it will return only first number 我几乎没有修改@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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM