我正在尝试链接两个表,其中一个表的'EntityRef'由四个字母字符和一个序列号组成...
EntityRef
=========
SWIT1
LIVE32
KIRB48
MEHM38
BRAD192
我要链接的表将引用存储在一个15个字符的字段中,其中4个Alpha字符在开头,数字在结尾,但中间用零组成15个字符...
EntityRef
=========
SWIT00000000001
LIVE00000000032
因此,要链接这些论文,我的选择是删除一个字段上的零或添加另一个字段上的零。
我后来去了,因为这似乎是一种更简单的方法,并且消除了如果数字元素包含零,则有陷入麻烦的风险。
所以,alpha开头始终是4个字符,数字是余数,而15减去EntityRef的LEN()是我需要插入的零的数量...
left(entityref,4) as 'Alpha',
right(entityref,len(EntityRef)-4) as 'Numeric',
15-len(EntityRef) as 'No.of Zeros'
Alpha Numeric No.of Zeros
===== ======= ===========
SWIT 1 10
LIVE 32 9
KIRB 48 9
MEHM 38 9
MALL 36 9
因此,我需要将三个元素连接起来,但是我不知道如何将零字符串创建为指定的长度...我该怎么做?
Concat(Alpha, '0'*[No. of Zeros], Numeric)
将字符重复指定次数的正确方法是什么?
答案 0 :(得分:1)
您可以使用字符串操作。在这种情况下:
LEFT()
获取字母部分。REPLICATE()
获得零。STUFF()
获取号码。查询:
select left(val, 4) + replicate('0', 15 - len(val)) + stuff(val, 1, 4, '')
from (values ('SWIT1'), ('ABC12345')) v(val)
答案 1 :(得分:1)
您可以尝试用零填充左键:
SELECT
LEFT(EntityRef, 4) +
RIGHT('00000000000' + SUBSTRING(ISNULL(EntityRef,''), 5, 30), 11) AS EntityRef
FROM yourTable;
答案 2 :(得分:0)
将数字部分强制转换为整数:
select *
from t1 inner join t2
on concat(left(t2.EntityRef, 4), cast(right(t2.EntityRef, 11) as bigint)) = t1.EntityRef
请参见demo。
答案 3 :(得分:0)
我在发布问题后立即找到了答案(有时它可以帮助您彻底思考!)。
(left(entityref,4) + replicate('0',15-len(EntityRef)) +
right(entityref,len(EntityRef)-4)),