2012-04-17 3 views
-1

enter image description hereПроверка наличия столбца в шаблоне или нет?

Я пишу запрос, чтобы получить FName из user_name_n колонок в следующем запрос я использую pathindex, чтобы найти место, как '% %' прохождения, которые возвращают значение pathindex налево и она работает нормально, но я имею записи , также как я могу написать запрос , который также позаботится о ,.

и некоторые записи, такие как Bellian, не имеют space or ,, но все же я хочу их в fname , но он не работает со следующим запросом.

SELECT top 100 user_name_n,left(user_name_n,(patindex('% %',user_name_n))) 
from SFCHA10_04_02_2012; 

Может ли кто-нибудь сказать мне, как я могу достичь желаемых результатов.

+0

Похоже, что первое имя после запятой (когда есть запятая), но первое имя перед пробелом (когда есть пробел). –

+0

@downvoter благодарит вас за вашу щедрость. –

ответ

2
Select user_name_n, 
     left(user_name_n,patindex('%[, ]%',user_name_n + ' ')-1) 
From SFCHA10_04_02_2012; 

Обратите внимание, что вы можете использовать '% [,]%' для поиска пробела или запятой. Также обратите внимание, что я добавил + '' ко второму параметру. Это приводит к совпадению, даже если данные не содержат пробела.

1
SELECT TOP (100) user_name_n, 
    SUBSTRING(
     user_name_n, 
     COALESCE(CHARINDEX(',',user_name_n)+1,1), 
     COALESCE(NULLIF(CHARINDEX(' ',user_name_n),0),255)) 
from SFCHA10_04_02_2012; 

Если вы хотите фамилию вместо имени, когда есть запятая в виде lname,fname (не знаю, почему это странное требование), то:

SELECT TOP (100) user_name_n, 
    SUBSTRING(user_name_n, 1, 
    COALESCE(NULLIF(CHARINDEX(',',user_name_n)-1,-1), 
     NULLIF(CHARINDEX(' ',user_name_n),0),255)) 
from SFCHA10_04_02_2012; 
+0

хорошо работает с '' '', но не с', 'он дает фамилию, как для 33,34,35, она возвращает Кэрол, Райан, Шеннон, где я хочу Брауна, Уилк. –

+0

Вы хотите фамилию, когда есть запятая? Зачем? Не являются ли Кэрол, Райан и Шеннон имена? –

+0

Нет имени fname только тогда, когда запятая, но ваш запрос дает фамилию, когда она содержит ','; –

0

поэтому сначала заменить запятые и точки на белом пространстве на КТР и вырезать имя от начала до первого вхождения пространства (или по всей длине в случае не должно быть пробелов):

with aux_query as(
select 
replace(REPLACE(user_name_n,',',' '),'.',' ') as name 
from SFCHA10_04_02_2012 
) 
select SUBSTRING (name,1, case CHARINDEX(' ',name) when null then LEN(name) else LEN(name) end) 
from aux_query 
+1

Diego .. можете ли вы хотя бы написать несколько предложений, объясняющих ваш мотив? Что такое mytable? Что такое мистика? Поле «имя» в aux_query должно быть таким же, как user_name_n? – deutschZuid

+0

спасибо (снова) Джеймс. Я, конечно, создал таблицу для тестирования, и я назвал ее mytable. Когда вы отправляете ответ, я забыл изменить имена на оригиналы. Goo coment – Diego

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