В SQL Server, как заменить часть строкового значения пустым значением и напечатать столбцы в правильном порядке? - PullRequest
0 голосов
/ 28 октября 2019

Хорошо. Я пишу сценарий с использованием кода SQL Server, но его нет в SQL Server, это еще один инструмент утилит данных, и он не предоставляет никаких отзывов об ошибках или почему я их получаю, поэтому я прошу о помощи, поэтому, пожалуйста, неголосование вниз спасибо

Хорошо, у меня есть определенный столбец, который включает электронные письма. Например, значение из этого столбца может быть «sam123@docoschools.org». Я пытаюсь вернуть только "sam123" для этого столбца. Для этого я попытался использовать этот код:

Replace(c.email, '@docoschools.org', ' ') as Email

, но он все равно возвращается как "sam123@docoschools.org". Что я здесь не так делаю? И это не печать в порядке, я выбираю столбцы. Если я выберу столбец электронной почты перед предложением замены и использую «присоединить контакт c на c.personid = p.personid» после «присоединить [Identity] i с (nolock) на i.identityID = p.currentIdentityID», то он запустится,Но если я попытаюсь выбрать столбец электронной почты после оператора замены и сохранить соединение в том же месте, в котором оно не запустится. Я пытаюсь выяснить, где добавить объединение и какое объединение добавить, чтобы столбец электронной почты пришел последним. Я попытался «оставить соединение с контактом c на c.personid = p.personid» после «оставить соединение [идентифицировать] его на it.identityID = tp.currentIdentityID», и он не запустился:


select distinct 
i.lastname as LINC_DBTSIS_CE020_LST_NME,
i.firstname as FRST_NME,
sl.number as SCH_NMR,
it.lastName  as LINC_DBTSIS_SY030_LST_NME,
tp.staffnumber as TCHR_NBR,
p.studentnumber as ID_NBR,
e.grade as GRDE,

replace(replace(replace(l.householdPhone,'(',''),')',''),'-','') as F1_PHNE
    from Person p with(nolock)
    join [Identity] i with(nolock) on i.identityID = p.currentIdentityID

    INNER JOIN enrollment e with(nolock) ON e.personID = p.personID AND e.enrollmentID =
    (SELECT TOP 1 x.enrollmentID FROM enrollment x
        INNER JOIN schoolyear syx with(nolock) ON syx.endyear = x.endyear AND syx.active = 1
        WHERE x.personID = p.personID AND x.endyear = e.endyear and x.active = 1
        ORDER BY CASE WHEN x.enddate IS NULL THEN 0 ELSE 1 END,CASE WHEN x.serviceType = 'P' THEN 1 ELSE 2 END, x.startDate DESC)
replace(c.email, '@docoschools.org', ' ') as Email
Join calendar cl with(nolock) on cl.calendarID = e.calendarID 
join school sl on sl.schoolID = cl.schoolID 
left join v_CensusContactSummary l on l.personID = p.personid 
left join person tp on tp.personID = dbo.fn_gethr_personID(e.enrollmentID)
left join [Identity] it on it.identityID = tp.currentIdentityID
left join contact c on c.personid = p.personid
where l.relationship = 'self'

1 Ответ

0 голосов
/ 28 октября 2019

Вы должны были бы изменить некоторые вещи. Я также добавил немного форматирования, чтобы его было легче расшифровать.

select distinct 
    i.lastname as LINC_DBTSIS_CE020_LST_NME,
    i.firstname as FRST_NME,
    sl.number as SCH_NMR,
    it.lastName  as LINC_DBTSIS_SY030_LST_NME,
    tp.staffnumber as TCHR_NBR,
    p.studentnumber as ID_NBR,
    e.grade as GRDE,
    replace(replace(replace(l.householdPhone,'(',''),')',''),'-','') as F1_PHNE,
    replace(c.email, '@docoschools.org', ' ') as Email
from Person p
join [Identity] i on i.identityID = p.currentIdentityID
INNER JOIN enrollment e ON e.personID = p.personID 
                        AND e.enrollmentID = (  SELECT TOP 1 x.enrollmentID 
                                                FROM enrollment x
                                                INNER JOIN schoolyear syx ON syx.endyear = x.endyear 
                                                    AND syx.active = 1
                                                WHERE x.personID = p.personID 
                                                    AND x.endyear = e.endyear 
                                                    and x.active = 1
                                                ORDER BY CASE WHEN x.enddate IS NULL THEN 0 ELSE 1 END
                                                    , CASE WHEN x.serviceType = 'P' THEN 1 ELSE 2 END
                                                    , x.startDate DESC
                                                )
Join calendar cl on cl.calendarID = e.calendarID 
join school sl on sl.schoolID = cl.schoolID 
left join v_CensusContactSummary l on l.personID = p.personid 
left join person tp on tp.personID = dbo.fn_gethr_personID(e.enrollmentID)
left join [Identity] it on it.identityID = tp.currentIdentityID
left join contact c on c.personid = p.personid
where l.relationship = 'self'
...