如何在字符串中重复字符

时间:2019-05-29 10:50:41

标签: sql tsql ssms

我正在尝试链接两个表,其中一个表的'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)

将字符重复指定次数的正确方法是什么?

4 个答案:

答案 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;

Demo

答案 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)),