Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中连接2个数字_Sql_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

在SQL Server中连接2个数字

在SQL Server中连接2个数字,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我需要一个函数来连接SQL Server中的2个数字 乙二醇 它应该根据第二个参数的长度返回结果(如第三个示例) 我尝试将其转换为字符串,并使用case语句将其连接起来。但是,我觉得,这可以用一种更有效的数学方法来实现。谁能给我建议一条路吗 根据,返回的输出应该是数字类型 试试这个- CREATE FUNCTION dbo.concat_num (@a INT, @b INT) RETURNS INT AS BEGIN RETURN CONVERT(INT, CONVERT(VARCHAR

我需要一个函数来连接SQL Server中的2个数字

乙二醇

它应该根据第二个参数的长度返回结果(如第三个示例)

我尝试将其转换为字符串,并使用case语句将其连接起来。但是,我觉得,这可以用一种更有效的数学方法来实现。谁能给我建议一条路吗

根据,返回的输出应该是数字类型

试试这个-

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

看起来这样就可以了:

select num1 * 1000 + num2

为什么这个简单的数学需要一个函数?

如你的问题所述

..它应根据第二个参数的长度返回结果

那意味着你可能是说

getuserid(3,333) = 3333
getuserid(8,5) = 85
getuserid(2,11) = 211
我在第二个参数上使用了
LEN()
,在第10个参数上使用了
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

CAST(field1作为VARCHAR(2))+CAST(field2作为VARCHAR(2))输出的长度是否至少为四位?你怎么知道需要填充多少个零?@Alexander K:第一个参数是一个数字。第二个参数将是最大3位数字。如果这个连接像您描述的那样简单,您可以使用
getuserid(x,y)=x*1000+y
@AlexanderK:它将是15555请注意我的最后一句话。!我也这样做了。我需要做一些数学上的事情。。
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