SQL Изменить позицию - PullRequest
0 голосов
/ 10 июля 2020

У меня есть одно такое поле

username
Vo, Tony (12322)
Beaty, Nancy (34343)

Я хочу изменить имя впереди вот так

username
Tony Vo (12322)
Nancy Beaty (34343)

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

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

select trim(parsename(name,2) + 
            parsename(name,3) + ' (' + 
            parsename(name,1)) as new_name
from your_table t1
cross apply (select translate(username,',(','..') as name) t2;

Вы также можете использовать подзапрос или CTE вместо cross apply

with cte as 
(select translate(username,',(','..') as username 
 from your_table)

select trim(parsename (username,2) + 
            parsename (username,3) + ' (' +
            parsename (username,1))
from cte;
0 голосов
/ 11 июля 2020
DECLARE @CoolTable AS TABLE (id int PRIMARY KEY IDENTITY(1,1), [name] nvarchar(100))
INSERT INTO @CoolTable values
    ('Man, Jo (123546)'),
    ('Vo, Tony (5533)'),
    ('Beaty, Nancy (7766)'),
    (',badData1 (100)'),
    ('badData2 (101)'),
    (',badData3')

SELECT
    CASE WHEN CHARINDEX(',', [name]) > 0 AND CHARINDEX('(', [name]) > 0 THEN
        RTRIM(LTRIM(SUBSTRING([name], CHARINDEX(',', [name])+1, CHARINDEX('(', [name]) - CHARINDEX(',', [name]) - 1)))
        + ' '
        + SUBSTRING([name], 0, CHARINDEX(',', [name]))
        + ' '
        + LTRIM(SUBSTRING([name], CHARINDEX('(', [name]) - 1, 100))
    ELSE
        [name]
    END AS [NewName]
FROM @CoolTable

Вывод:

NewName
---------------------------
Jo Man (123546)
Tony Vo (5533)
Nancy Beaty (7766)
badData1  (100)
badData2 (101)
,badData3

Меня этот код не радует. И по мар ie Кондо, я должен его удалить. Если бы это зависело от меня, я бы посмотрел, как улучшить процесс вставки исходных данных (например, получить в 3 разных полях).

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