使用SQL查询,我喜欢获取以下格式的连接数据,尤其是当Val3的值小于5位时,需要在Val1和Val2之间添加额外的0。
Val1 VAL2 Val3
===================
3 22 30022
33 22 33022
33 222 33222
谢谢您的帮助。
答案 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实例,但是基本上是:
获取val1
列中的值,并根据需要用0
右移。如果您不提前知道此列中的最大位数,则必须通过另一个查询来获取它(获取max int val,转换为varchar,获取其长度)。
Left(Cast(val1 As varchar(2)) + '00', 2)
假设最多2位数字,则使用左括号内的表达式300
来获得varchar,然后使用2
左边的数字,而剩下30
。
用另一种方法(在左键盘上)对val2
中的值执行相同的操作。
Right('000' + Cast(val2 As varchar(3)), 3)
假设另一列(val2
)上最多3位数字,则得到00022
之类的varchar并取正确的3位数字,剩下022
。
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 |
+------+------+-------+