在SQL Server中连接2个数字
我需要一个函数来连接SQL Server中的2个数字 乙二醇 它应该根据第二个参数的长度返回结果(如第三个示例) 我尝试将其转换为字符串,并使用case语句将其连接起来。但是,我觉得,这可以用一种更有效的数学方法来实现。谁能给我建议一条路吗 根据,返回的输出应该是数字类型 试试这个-在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
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