Trailing String Characters in SQL Statement

Hi Experts,

I'm trying to compile a list of ';' separated values from 10 fields in a SQL table but I'm left with ';' at the end of my string. Here's my query:

SELECT STUFF(
(SELECT  '; '+ SUBSTRING(Alert1,CHARINDEX('^',Alert1)+1, LEN(Alert1))+ '; ' +
      COALESCE(SUBSTRING(Alert2, CHARINDEX('^', ALERT2)+1, LEN(Alert2)),'') + '; ' +
      COALESCE(SUBSTRING(Alert3, CHARINDEX('^', ALERT3)+1, LEN(Alert3)),'') + '; ' +
      COALESCE(SUBSTRING(Alert4, CHARINDEX('^', ALERT4)+1, LEN(Alert4)),'') + '; ' +
      COALESCE(SUBSTRING(Alert5, CHARINDEX('^', ALERT5)+1, LEN(Alert5)),'') + '; ' +
      COALESCE(SUBSTRING(Alert6, CHARINDEX('^', ALERT6)+1, LEN(Alert6)),'') + '; ' +
      COALESCE(SUBSTRING(Alert7, CHARINDEX('^', ALERT7)+1, LEN(Alert7)),'') + '; ' +
      COALESCE(SUBSTRING(Alert8, CHARINDEX('^', ALERT8)+1, LEN(Alert8)),'') + '; ' +
      COALESCE(SUBSTRING(Alert9, CHARINDEX('^', ALERT9)+1, LEN(Alert9)),'') + '; ' +
      COALESCE(SUBSTRING(Alert10,CHARINDEX('^',Alert10)+1, LEN(Alert10)),'')
    FROM tblPatientData
      WHERE CaseNumber = '10223001'
    FOR XML PATH ('')),1,1,'') AS RESULTS

And Results:

 EPILEPSY; RISK OF FALLS; DIZZINESS; HIV/AIDS; A-FIB      ; ; ; ; ;

It's highly doubtful any patient will exceed 5 Alerts so getting rid of the trailing ';' is imperative. I've just ran out of time on this one.

Thanks in advance,

JackW9653
JackW9653Asked:
Who is Participating?
 
Jim HornConnect With a Mentor Microsoft SQL Server Developer, Architect, and AuthorCommented:
<really generalizing here>

Would probably be a good idea to validate that the columns are not null before the ;
Something like (repeat for each Alert1..10)...
CASE WHEN ISNULL(Altert7, '') <> '' THEN {your expression here} + ';' ELSE '' END + 

Open in new window

0
 
JackW9653Author Commented:
Good idea; here's the finished query:

SELECT STUFF(
(SELECT  '; '+ SUBSTRING(Alert1,CHARINDEX('^', Alert1)+1, LEN(Alert1))+ '; ' +
      CASE WHEN ISNULL(Alert2, '') <> ''THEN COALESCE(SUBSTRING(Alert2, CHARINDEX('^', ALERT2)+1, LEN(Alert2)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert3, '') <> ''THEN COALESCE(SUBSTRING(Alert3, CHARINDEX('^', ALERT3)+1, LEN(Alert3)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert4, '') <> ''THEN COALESCE(SUBSTRING(Alert4, CHARINDEX('^', ALERT4)+1, LEN(Alert4)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert5, '') <> ''THEN COALESCE(SUBSTRING(Alert5, CHARINDEX('^', ALERT5)+1, LEN(Alert5)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert6, '') <> ''THEN COALESCE(SUBSTRING(Alert6, CHARINDEX('^', ALERT6)+1, LEN(Alert6)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert7, '') <> ''THEN COALESCE(SUBSTRING(Alert7, CHARINDEX('^', ALERT7)+1, LEN(Alert7)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert8, '') <> ''THEN COALESCE(SUBSTRING(Alert8, CHARINDEX('^', ALERT8)+1, LEN(Alert8)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert9, '') <> ''THEN COALESCE(SUBSTRING(Alert9, CHARINDEX('^', ALERT9)+1, LEN(Alert9)),'') + '; ' ELSE '' END +
      CASE WHEN ISNULL(Alert10, '') <> ''THEN COALESCE(SUBSTRING(Alert10,CHARINDEX('^',Alert10)+1, LEN(Alert10)),'') ELSE '' END
    FROM tblPatientData
      WHERE CaseNumber = '10223001'
    FOR XML PATH ('')),1,1,'') AS RESULTS

Thanks for your help.

JackW9653
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.