Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. SQL case function to check for charindex as '' or ','

SQL case function to check for charindex as '' or ','

Scheduled Pinned Locked Moved Database
databasehelp
15 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Trustapple

    Hi Mika, I modified my query like this;It still is not working :( select customername, case when CHARINDEX(',', customername)>0 then substring(customername,1,CHARINDEX(',', customername) -1) as [firstname ], SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername)) AS [LastName] else substring(customername,1,CHARINDEX(',', customername) -1) as [firstname ], SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername)) AS [LastName] from TableName

    W Offline
    W Offline
    Wendelius
    wrote on last edited by
    #4

    Trustapple wrote:

    It still is not working

    Getting and error message? I think it should be more like (may contain several typos):

    select customername,
    case
    when CHARINDEX(',', customername)>0 then
    substring(customername,1,CHARINDEX(',', customername) -1)
    else
    substring(customername,1,CHARINDEX(' ', customername) -1)
    end as [firstname ],
    case
    when CHARINDEX(',', customername)>0 then
    SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername))
    else
    SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername))
    end AS [LastName]
    from TableName

    The need to optimize rises from a bad design.My articles[^]

    T B 2 Replies Last reply
    0
    • W Wendelius

      Trustapple wrote:

      It still is not working

      Getting and error message? I think it should be more like (may contain several typos):

      select customername,
      case
      when CHARINDEX(',', customername)>0 then
      substring(customername,1,CHARINDEX(',', customername) -1)
      else
      substring(customername,1,CHARINDEX(' ', customername) -1)
      end as [firstname ],
      case
      when CHARINDEX(',', customername)>0 then
      SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername))
      else
      SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername))
      end AS [LastName]
      from TableName

      The need to optimize rises from a bad design.My articles[^]

      T Offline
      T Offline
      Trustapple
      wrote on last edited by
      #5

      Hey Mika, Thanks for you trying to help.My server i unavailable now.I will be able to access it only after 5hours.As soon as i try thi s query i will post a reply and let you know. Many Thanks for your help....:) Merry Christmas

      W 1 Reply Last reply
      0
      • W Wendelius

        Trustapple wrote:

        It still is not working

        Getting and error message? I think it should be more like (may contain several typos):

        select customername,
        case
        when CHARINDEX(',', customername)>0 then
        substring(customername,1,CHARINDEX(',', customername) -1)
        else
        substring(customername,1,CHARINDEX(' ', customername) -1)
        end as [firstname ],
        case
        when CHARINDEX(',', customername)>0 then
        SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername))
        else
        SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername))
        end AS [LastName]
        from TableName

        The need to optimize rises from a bad design.My articles[^]

        B Offline
        B Offline
        Ben Fair
        wrote on last edited by
        #6

        I think it should be:

        select customername,
        -- get the last name
        case
        when CHARINDEX(',', customername) > 0 then
        SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter
        when CHARINDEX(' ', customername) > 0 then
        SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter
        else
        '' -- neither comma nor space found
        end as [lastname],
        -- get the first name
        case
        when CHARINDEX(',', customername) > 0 then
        SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter
        when CHARINDEX(' ', customername) > 0 then
        SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter
        else
        '' -- neither comma nor space found
        end AS [firstname]
        from TableName

        Keep It Simple Stupid! (KISS)

        W T 2 Replies Last reply
        0
        • T Trustapple

          Hey Mika, Thanks for you trying to help.My server i unavailable now.I will be able to access it only after 5hours.As soon as i try thi s query i will post a reply and let you know. Many Thanks for your help....:) Merry Christmas

          W Offline
          W Offline
          Wendelius
          wrote on last edited by
          #7

          Trustapple wrote:

          Thanks for you trying to help

          No problem :)

          Trustapple wrote:

          I will be able to access it only after 5hours.As soon as i try thi s query i will post a reply and let you know

          At that time it's 3:30 AM here so I'll be :zzz: :zzz: :zzz: But I'll have a look at your reply in the morning. If you encounter problems I believe that someone else will help you forward in the meantime.

          Trustapple wrote:

          Merry Christmas

          Merry Christmas to you too :)

          The need to optimize rises from a bad design.My articles[^]

          T 2 Replies Last reply
          0
          • B Ben Fair

            I think it should be:

            select customername,
            -- get the last name
            case
            when CHARINDEX(',', customername) > 0 then
            SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter
            when CHARINDEX(' ', customername) > 0 then
            SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter
            else
            '' -- neither comma nor space found
            end as [lastname],
            -- get the first name
            case
            when CHARINDEX(',', customername) > 0 then
            SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter
            when CHARINDEX(' ', customername) > 0 then
            SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter
            else
            '' -- neither comma nor space found
            end AS [firstname]
            from TableName

            Keep It Simple Stupid! (KISS)

            W Offline
            W Offline
            Wendelius
            wrote on last edited by
            #8

            Yeah, you're rught. I misplaced the commas. Corrected now.

            Ben Fair wrote:

            SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter

            Although it's 'cleaner' to use the rest of the length as a parameter, it's not necessary. Basically if you want the rest of the string you can pass any value as long as it's at least the rest of the length.

            The need to optimize rises from a bad design.My articles[^]

            B 1 Reply Last reply
            0
            • W Wendelius

              Yeah, you're rught. I misplaced the commas. Corrected now.

              Ben Fair wrote:

              SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter

              Although it's 'cleaner' to use the rest of the length as a parameter, it's not necessary. Basically if you want the rest of the string you can pass any value as long as it's at least the rest of the length.

              The need to optimize rises from a bad design.My articles[^]

              B Offline
              B Offline
              Ben Fair
              wrote on last edited by
              #9

              Oh, I wasn't aware of that; I'll have to remember that! Thanks!

              Keep It Simple Stupid! (KISS)

              1 Reply Last reply
              0
              • W Wendelius

                Trustapple wrote:

                Thanks for you trying to help

                No problem :)

                Trustapple wrote:

                I will be able to access it only after 5hours.As soon as i try thi s query i will post a reply and let you know

                At that time it's 3:30 AM here so I'll be :zzz: :zzz: :zzz: But I'll have a look at your reply in the morning. If you encounter problems I believe that someone else will help you forward in the meantime.

                Trustapple wrote:

                Merry Christmas

                Merry Christmas to you too :)

                The need to optimize rises from a bad design.My articles[^]

                T Offline
                T Offline
                Trustapple
                wrote on last edited by
                #10

                Hey Mika, Thanks again to you and Ben....It worked.I made slight modification in the query though...a very slight one. The credit goes to you guys .... Please see the working query and let me know if any tweaking is necessary...becuase i will be cghnaging this select to update query for around 9million records.....:) select customername, -- get the last name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter else '' -- neither comma nor space found end as [lastname], -- get the first name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter else '' -- neither comma nor space found end AS [firstname] from TableName

                1 Reply Last reply
                0
                • W Wendelius

                  Trustapple wrote:

                  Thanks for you trying to help

                  No problem :)

                  Trustapple wrote:

                  I will be able to access it only after 5hours.As soon as i try thi s query i will post a reply and let you know

                  At that time it's 3:30 AM here so I'll be :zzz: :zzz: :zzz: But I'll have a look at your reply in the morning. If you encounter problems I believe that someone else will help you forward in the meantime.

                  Trustapple wrote:

                  Merry Christmas

                  Merry Christmas to you too :)

                  The need to optimize rises from a bad design.My articles[^]

                  T Offline
                  T Offline
                  Trustapple
                  wrote on last edited by
                  #11

                  Hey Mika, The time now is 7:59 AM for you,i beleive....Happy sleeping:). Thanks again to you and Ben....It worked.I made slight modification in the query though...a very slight one. The credit goes to you guys .... Please see the working query and let me know if any tweaking is necessary...becuase i will be cghnaging this select to update query for around 9million records.....:) select customername, -- get the last name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter else '' -- neither comma nor space found end as [lastname], -- get the first name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter else '' -- neither comma nor space found end AS [firstname] from TableName

                  1 Reply Last reply
                  0
                  • B Ben Fair

                    I think it should be:

                    select customername,
                    -- get the last name
                    case
                    when CHARINDEX(',', customername) > 0 then
                    SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter
                    when CHARINDEX(' ', customername) > 0 then
                    SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter
                    else
                    '' -- neither comma nor space found
                    end as [lastname],
                    -- get the first name
                    case
                    when CHARINDEX(',', customername) > 0 then
                    SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter
                    when CHARINDEX(' ', customername) > 0 then
                    SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter
                    else
                    '' -- neither comma nor space found
                    end AS [firstname]
                    from TableName

                    Keep It Simple Stupid! (KISS)

                    T Offline
                    T Offline
                    Trustapple
                    wrote on last edited by
                    #12

                    Hey , Thanks a lot to you and Mika it worked. You guys have been wonderful. Hey i ran into another problem.... I might need to integrate one more condition;ie along with our query i want it to also do this that is if the customername is Mika (ie the name is only one word and it doesnot contain any ',' or ' ')Then it should update to FirstName.....Am pasting the working query below can any of you integrate this to my query..... Name FirstName LastName Mika Mika Ben Ben QUERY:update TableName set lastname= -- get the last name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter else '' -- neither comma nor space found end, -- get the first name firstname = case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter else '' -- neither comma nor space found end

                    modified on Thursday, December 11, 2008 2:23 AM

                    W 1 Reply Last reply
                    0
                    • T Trustapple

                      Hey , Thanks a lot to you and Mika it worked. You guys have been wonderful. Hey i ran into another problem.... I might need to integrate one more condition;ie along with our query i want it to also do this that is if the customername is Mika (ie the name is only one word and it doesnot contain any ',' or ' ')Then it should update to FirstName.....Am pasting the working query below can any of you integrate this to my query..... Name FirstName LastName Mika Mika Ben Ben QUERY:update TableName set lastname= -- get the last name case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter else '' -- neither comma nor space found end, -- get the first name firstname = case when CHARINDEX(',', customername) > 0 then SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter when CHARINDEX(' ', customername) > 0 then SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter else '' -- neither comma nor space found end

                      modified on Thursday, December 11, 2008 2:23 AM

                      W Offline
                      W Offline
                      Wendelius
                      wrote on last edited by
                      #13

                      Trustapple wrote:

                      Thanks

                      You're welcome.

                      Trustapple wrote:

                      along with our query i want it to also do this that is if the customername is Mika (ie the name is only one word and it doesnot contain any ',' or ' ')Then it should update to FirstName.....

                      Do you mean something like this:

                      update TableName
                      set lastname
                      = case
                      when CHARINDEX(',', customername) > 0 then
                      SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter
                      when CHARINDEX(' ', customername) > 0 then
                      SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter
                      else
                      TableName.LastName -- no delimitter so don't change lastname in the table
                      end,
                      firstname
                      = case
                      when CHARINDEX(',', customername) > 0 then
                      SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter
                      when CHARINDEX(' ', customername) > 0 then
                      SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter
                      else
                      customername -- no delimiter so use the full data to firstname
                      end ...

                      The need to optimize rises from a bad design.My articles[^]

                      T 1 Reply Last reply
                      0
                      • W Wendelius

                        Trustapple wrote:

                        Thanks

                        You're welcome.

                        Trustapple wrote:

                        along with our query i want it to also do this that is if the customername is Mika (ie the name is only one word and it doesnot contain any ',' or ' ')Then it should update to FirstName.....

                        Do you mean something like this:

                        update TableName
                        set lastname
                        = case
                        when CHARINDEX(',', customername) > 0 then
                        SUBSTRING(customername, 1, CHARINDEX(',', customername) - 1) -- comma is delimiter
                        when CHARINDEX(' ', customername) > 0 then
                        SUBSTRING(customername, CHARINDEX(' ', customername) + 1, LEN(customername) - CHARINDEX(' ', customername) + 1) -- space is delimiter
                        else
                        TableName.LastName -- no delimitter so don't change lastname in the table
                        end,
                        firstname
                        = case
                        when CHARINDEX(',', customername) > 0 then
                        SUBSTRING(customername, CHARINDEX(',', customername) + 1, LEN(customername) - CHARINDEX(',', customername) + 1) -- comma is delimiter
                        when CHARINDEX(' ', customername) > 0 then
                        SUBSTRING(customername, 1, CHARINDEX(' ', customername) - 1) -- space is delimiter
                        else
                        customername -- no delimiter so use the full data to firstname
                        end ...

                        The need to optimize rises from a bad design.My articles[^]

                        T Offline
                        T Offline
                        Trustapple
                        wrote on last edited by
                        #14

                        Hey Mika, I got it working.Thanks for your help......again :). Lots of Bestwishes, Jiju

                        W 1 Reply Last reply
                        0
                        • T Trustapple

                          Hey Mika, I got it working.Thanks for your help......again :). Lots of Bestwishes, Jiju

                          W Offline
                          W Offline
                          Wendelius
                          wrote on last edited by
                          #15

                          Trustapple wrote:

                          Thanks for your help

                          You're welcome.

                          The need to optimize rises from a bad design.My articles[^]

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • World
                          • Users
                          • Groups