2016-01-18 2 views
1

У меня есть таблица Employee, в которой некоторые значения начинаются с ",". Таким образом, мне нужно удалить запятой и белого пространства в начале названия в момент SELECT, запрос использованием LTRIM() - SQL-Server.Как определить гайки Trim в SQL TRIM

Мой Стол: Сотрудник

CREATE TABLE Employee 
(
PersonID int, 
ContactName varchar(255), 
Address varchar(255), 
City varchar(255) 
); 

INSERT INTO Employee(PersonID, ContactName, Address, City) 
VALUES ('1001',', B. Bala','21, Car Street','Bangalore'); 

SELECT PersonID, ContactName, Address, City FROM Employee 

Здесь колонна ContactName имеет значение ", В. Бала". Мне нужно удалить запятую и пробел в начале имени.

ответ

1

Вы можете использовать PATINDEX(), чтобы это сделать.

DECLARE @Text VARCHAR(50) = ', Well Crap'; 

SELECT STUFF(@Text, 1, PATINDEX('%[A-z]%', @Text) - 1, ''); 

Это приведет к выводу Well Crap. PATINDEX() найдет первое слово в слове и вырежьте все перед ним.

Он отлично работает, даже если нет ведущего мусора:

DECLARE @Text VARCHAR(50) = 'Mister Roboto'; 

SELECT STUFF(@Text, 1, PATINDEX('%[A-z]%', @Text) - 1, ''); 

Это выводит Mister Roboto

Если нет действительных символов, скажем ContactName является , 9132124, :::, это выведет NULL, если вы хотите хотел бы получить чистый результат, вы можете использовать COALESCE():

DECLARE @Text VARCHAR(50) = ', 9132124, :::'; 

SELECT COALESCE(STUFF(@Text, 1, PATINDEX('%[A-z]%', @Text) - 1, ''), ''); 

Это outpu t пустая строка.

+0

небольшая проблема, пустое имя станет пустым. Что может быть проблемой –

+0

@ t-clausen.dk Я знаю об этом. Но это действительно вызывает сомнения. Я всегда могу добавить 'COALESCE()', если значения 'NULL' являются нежелательными. Я добавлю это, чтобы ответить. –

4

Увы, SQL Server не поддерживает стандартную функциональность ANSI для указания символов для LTRIM().

В этом случае, вы можете использовать:

(case when ContactName like ', %' then stuff(ContactName, 1, 2, '') 
     else ContactName 
end) 
1

Вы также можете использовать REPLACE .....

например.

REPLACE(' ,Your String with space comma', ' ,', '') 
1
UPDATE dbo.Employee 
SET   
dbo.Employee.ContactName = replace(LEFT(ContactName, 2),', ','') 
+ SUBSTRING (ContactName, 3, len(contactname)) 
    where LEFT(ContactName, 2)=', ' 

Это обновит только там, где первые два символа содержит «»