как повторять символы в строке - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь связать две таблицы, одна имеет EntityRef, который состоит из четырех буквенных символов и порядкового номера ...

EntityRef
=========
SWIT1
LIVE32
KIRB48
MEHM38
BRAD192

Таблица, которую я пытаюсь связать, хранит ссылку в 15-символьном поле, где 4 альфы находятся в начале, а цифры в конце, но с нулями между ними, чтобы составить 15 символов ...

EntityRef
=========
SWIT00000000001
LIVE00000000032

Итак, чтобы связать тезисы, я могу либо удалить нули в одном поле, либо добавить нули в другом.

Я остановился на последнем, поскольку он кажется более простым подходом и исключает риск возникновения проблем, если числовой элемент содержит ноль.

Итак, альфа всегда 4 символа в начале, а число - это остаток, а 15 минус LEN () EntityRef - это число нулей, которое мне нужно вставить ...

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 ]

1 голос
/ 29 мая 2019

Вы можете попробовать заполнение слева нулями:

SELECT
    LEFT(EntityRef, 4) +
    RIGHT('00000000000' + SUBSTRING(ISNULL(EntityRef,''), 5, 30), 11) AS EntityRef
FROM yourTable;

Демо

1 голос
/ 29 мая 2019

Вы можете использовать манипуляции со строками.В этом случае:

  • LEFT() для получения альфа-части.
  • REPLICATE() для получения нулей.
  • STUFF() для получения номера.

Запрос:

select left(val, 4) + replicate('0', 15 - len(val)) + stuff(val, 1, 4, '')
from (values ('SWIT1'), ('ABC12345')) v(val)
0 голосов
/ 29 мая 2019

Я нашел ответ, как только отправил вопрос (иногда он помогает вам обдумать его!).

(left(entityref,4) + replicate('0',15-len(EntityRef)) + 
right(entityref,len(EntityRef)-4)),
0 голосов
/ 29 мая 2019

С приведением к целому числу числовой части:

select * 
from t1 inner join t2
on concat(left(t2.EntityRef, 4), cast(right(t2.EntityRef, 11) as bigint)) = t1.EntityRef

См. Демоверсию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...