连接两个数字列中的值+加0

时间:2018-07-11 20:06:20

标签: sql sql-server tsql

使用SQL查询,我喜欢获取以下格式的连接数据,尤其是当Val3的值小于5位时,需要在Val1和Val2之间添加额外的0。

Val1  VAL2   Val3
===================
3    22       30022
33   22       33022
33   222      33222

谢谢您的帮助。

5 个答案:

答案 0 :(得分:1)

我将使用算术方法做到这一点:

DECLARE @table TABLE (VAL1 INT, VAL2 INT);
INSERT @table
VALUES (3 , 22 ),(33, 22 ),(33, 222);

SELECT CONCAT(t.VAL1,REPLICATE(0,5-(LEN(t.VAL1)+LEN(t.VAL2))),t.VAL2)
FROM @table t;

答案 1 :(得分:0)

也许有更好的方法,但是假设它们的末尾都有5个数字。

DECLARE @TEMP TABLE (VAL1 INT, VAL2 INT, VAL3 INT)
insert into @TEMP(VAL1, VAL2)
VALUES(3,22)
,(33,22)
,(33,222)

UPDATE @TEMP
SET VAL3 = CONVERT(VARCHAR(5),VAL1) + LEFT('00000',5 - LEN(Val1)-Len(Val2)) + CONVERT(VARCHAR(5),VAL2)

Select * 
from @TEMP

答案 2 :(得分:0)

如果您有SQL Server 2012+,则可以执行以下操作:

<Link to={'/pathName'}> Click here to send data </Link>

答案 3 :(得分:0)

我无法测试,因为我没有sql server实例,但是基本上是:

  1. 获取val1列中的值,并根据需要用0右移。如果您不提前知道此列中的最大位数,则必须通过另一个查询来获取它(获取max int val,转换为varchar,获取其长度)。

    Left(Cast(val1 As varchar(2)) + '00', 2)
    

假设最多2位数字,则使用左括号内的表达式300来获得varchar,然后使用2左边的数字,而剩下30

  1. 用另一种方法(在左键盘上)对val2中的值执行相同的操作。

    Right('000' + Cast(val2 As varchar(3)), 3)
    

假设另一列(val2)上最多3位数字,则得到00022之类的varchar并取正确的3位数字,剩下022

  1. 将(1)和(2)合并到一个新的计算列val3中。

因此,您计算出的列val3可能类似于

    Left(Cast(val1 As varchar(2)) + '00', 2) + Right('000' + Cast(val2 As varchar(3)), 3)

您的查询也因此

select 
    val1, 
    val2,
    Left(Cast(val1 As varchar(2)) + '00', 2) + Right('000' + Cast(val2 As varchar(3)), 3)
from wherever ...

有关填充的示例文档,请参见here

答案 4 :(得分:0)

我认为与其他答案非常相似。

这将使用简单的LEN验证,根据两列长度的总和的大小在中间添加特定数目的零。

设置:

DECLARE @TEMP TABLE (VAL1 VARCHAR(5), VAL2 VARCHAR(5), VAL3 VARCHAR(5))
INSERT INTO @TEMP(VAL1, VAL2)
VALUES(3,22)
,(33,22)
,(31,222)
,(32,222)
,(33,222)
,(34,222)
,(35,222)
,(36,222)
,(1,22)
,(0,2)
,(1,2345)

查询:

SELECT VAL1,
    VAL2,
    RIGHT(
        VAL1 + RIGHT(
            '00000', 5 - (LEN(VAL1) + LEN(VAL2))
            ) + VAL2, 5
        ) AS VAL3
FROM @TEMP

输出:

+------+------+-------+
| VAL1 | VAL2 | VAL3  |
+------+------+-------+
|    3 |   22 | 30022 |
|   33 |   22 | 33022 |
|   31 |  222 | 31222 |
|   32 |  222 | 32222 |
|   33 |  222 | 33222 |
|   34 |  222 | 34222 |
|   35 |  222 | 35222 |
|   36 |  222 | 36222 |
|    1 |   22 | 10022 |
|    0 |    2 | 00002 |
|    1 | 2345 | 12345 |
+------+------+-------+