#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