разделение строки из одного столбца и извлечение одной части строки в другой столбец в sql

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я использую sql server 2008 r2. Проблема возникла, когда один человек ввел данные в базу данных в двух разных форматах.

Таблица выглядит следующим образом: (как вы можете заметить FName , LName в столбце «Заголовок» есть и, но оно должно быть в FName LName столбцах и соответственно.

  Title                      FirstName         LastName
 -------------------------------------------------------------------
 Prasident Ena Enic          null              null    *(not ok)*
 Prasident                   Hana              Hanic   *(ok)*
 Prasident Jack Johnson      null              null    *(wrong)*
  

Поэтому я разделил строку в заголовке на 3 части ( Title , SFirstName и SLastName ), используя приведенный ниже код.

 ltrim(SUBSTRING (title ,CHARINDEX(' ', title) 1,
charindex(' ',title ' ',charindex(' ',title) 1)-charindex(' ',title)-1)),
ltrim(substring(title, charindex(' ',title,charindex(' ',title) 1), len(title)))
  

и я получил таблицу этого типа.

 SplittedTitle   SplittedFirstName  SplittedLastName  FirstName    LastName  
-------------------------------------------------------------------------------
Prasident        Ena                 Enic              null         null
Prasident        Prasident           Prasident         Hana         Hanic
Prasident        Jack                Johnson           null         null
  

Теперь у меня проблема с нулями в FirstName и LastName . Как я могу передать правильные данные (из SplittedFirstName и SplittedLastName) вместо нулей. Я надеюсь, что кто-нибудь понял, в чем заключается моя проблема.

У кого-нибудь есть какие-нибудь идеи? Какую функцию я должен использовать и как?

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

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

2. Существует ли какое-либо значение заголовка с более чем одним именем / фамилией? Как прасидент Джек Джо Талса Джонсон? В таком случае, как это должно быть разделено?

Ответ №1:

Я думаю, вам нужно обновление. Вы можете сделать это с помощью обновляемого CTE:

 with toupdate as (
      <your query here>
     )
update toupdate
    set FirstName = SplittedFirstName,
        LastName = SplittedLastName
    where FirstName is null and LastName is null;
  

Ответ №2:

Вы имеете в виду что-то вроде этого:

 x IsNull(y,'')
  

который заменяет y пустой строкой, если она равна нулю?

Вы можете найти больше об этой функции здесь:

Ответ №3:

Все, что вам нужно сделать сейчас, это запустить обновление для этой результирующей таблицы

 UPDATE tablename  
SET   
FirstName = case when SplittedTitle <> SplittedFirstName  
                 then SplittedFirstName end,  
LastName = case when SplittedTitle <> SplittedLastName  
                then SplittedLastName end