Форматирование строки путем заполнения начальными нулями в SQL

#sql #tsql

Вопрос:

У нас есть один старый столбец комментариев с этими комментариями ACCTFEETOMANAGER, ACCTFEEFRMMANAGER, ACCTFNWRKSRMANAGER в таблице SQL.

Теперь я должен преобразовать это в «ACCTFEE В МЕНЕДЖЕРА», но общий символ должен быть 24.

Ожидаемый результат будет «000000ACCTFEE МЕНЕДЖЕРУ», «00000ACCTFEE FRM МЕНЕДЖЕРУ», «00ACCTF N WRK SR МЕНЕДЖЕРУ».

Если у кого-нибудь есть идея, пожалуйста, ответьте.

Комментарии:

1. Да, вот идея: перестаньте хранить несколько вещей в одном столбце. Это несколько строк или одна строка с разделителями через запятую? Правильные выборочные данные и ожидаемые результаты (as CREATE TABLE/INSERT ) помогут

2. Вы заявляете, что у вас есть именно те 3 комментария, которые вы хотите заменить, так почему бы просто не использовать replace ?

Ответ №1:

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

Двумя возможными способами из многих были бы

 select t.comments, 
    Replace(
        Replace(
            Replace(comments,'ACCTFEETOMANAGER','000000ACCTFEE TO MANAGER'
            ),'ACCTFEEFRMMANAGER','00000ACCTFEE FRM MANAGER'
        ),'ACCTFNWRKSRMANAGER','00ACCTF N WRK SR MANAGER'
    ) Result
from t


with map as (
    select * from (
        values 
            ('ACCTFEETOMANAGER','000000ACCTFEE TO MANAGER'),
            ('ACCTFEEFRMMANAGER','00000ACCTFEE FRM MANAGER'),
            ('ACCTFNWRKSRMANAGER','00ACCTF N WRK SR MANAGER')
    )v(s,t)
)
select t.comments, m.t Result
from t
join map m on m.s=t.comments
 

Комментарии:

1. Спасибо, СТЮ, но если текст изменится, то это не сработает. Мне нужен код для любого текста, а ширина столбца должна быть 24. Если вы можете добавить пробелы после МЕНЕДЖЕРА, чтобы сделать 24 символа, тоже будет хорошо.

2. Таким образом, любая строка переменной длины может быть дополнена нулями фиксированной длины, это вообще не проблема, но вы добавляете пробелы, так что по какой логике ACCTFEET становится ACCTFEE T и т. Д