2010-09-30 2 views
1

Я перемещаю данные из старой таблицы в новую версию SQL Server и борюсь с чем-то, что, надеюсь, кто-то может помочь.Изменить порядок строк - Sql-сервер

У меня есть столбец в старой таблице с именем «EmployeeName» в порядке имени firstname.lastname. В новой таблице мы будем использовать руководство для идентификации сотрудников. Таблица с указателем guid имеет имена в порядке «lastname, firstname», поэтому моя функция, которую я написал, чтобы вытащить guid для сотрудника, не соответствует именам.

Как я могу на сервере SQL преобразовать 'firstname.lastname' в 'lastname, firstname'?

здесь функция я писал:

ALTER FUNCTION [Wire].[udf_GetEmployeeGuid_FromName] 
(@EmployeeName VARCHAR(50) -- format 'firstname.lastname') 
RETURNS uniqueidentifier 
AS 
BEGIN 
DECLARE @EmployeeGuid  uniqueidentifier 
SELECT @EmployeeGuid = GUID 
FROM B.Employees --format 'lastname, firstname' 
WHERE LEFT(@EmployeeName, CHARINDEX('.', @EmployeeName)) = RIGHT([Name], LEN([Name]) - CHARINDEX(', ', [Name])) 
RETURN IsNull(@EmployeeGuid, '00000000-0000-0000-0000-000000000000') 
END 

ответ

1

Вот начало:

Вы можете получить ЬавЬЫат из firstname.lastname так:

RIGHT(EmployeeName, LEN(EmployeeName) - CHARINDEX('.', EmployeeName))

Кроме того, вы можете get lastname from lastname, первое имя:

LEFT((EmployeeName, CHARINDEX('.', EmployeeName))

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

Вы можете рассмотреть также использование TRIM для устранения пробелов в данных.

+0

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

+0

Я выбегаю из двери, но вкратце вы хотите SELECT guid FROM tablename WHERE LEFT ((othertable.EmployeeName, CHARINDEX ('.', Othertable.EmployeeName)) = RIGHT (tablename.EmployeeName, LEN (tablename.EmployeeName) - CHARINDEX ('.', Tablename.EmployeeName)) - вы хотите WHERE для обоих firstnames и AND для обоих последних имен, используя синтаксис LEFT и RIGHT. – DOK

+0

Argh! Попробуйте разбить свою функцию на части и убедиться, что они делают то, что вы ожидаете. Например, проверьте, что вы получаете от первой части предложения WHERE следующим образом: SELECT TOP 100 * FROM B.Employees WHERE LEFT (@EmployeeName, CHARINDEX ('.', @EmployeeName)). Вы можете найти, например, там, где нет запятой после запятой, или есть лишние пробелы в одной таблице. Просто просмотрите данные. Кроме того, я думаю, вам нужно иметь И в ГДЕ для другого имени. , одно предложение совпадает с первым именем, а второе совпадает с последним. Убедитесь, что вы только получаете один запись возвращен. – DOK

Смежные вопросы