Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Substring in sql server on numbers

I have a column name called "PersonNameID"

which contains two values

ABCD-GHJI
ABHK-67891
HJKK-HJJJMH-8990

I have to extract only the first part of the "PersonNameID" which contains number after "-".Ideally my output should be

ABCD-GHJI
ABHK
HJKK-HJJJMH

but when I use following code :

SELECT TOP 100

     CONVERT(NVARCHAR(100),

     SUBSTRING(PersonNameID, 1,
          CASE
               WHEN CHARINDEX('-', PersonNameID) > 0 
                    THEN LEN(PersonNameID) - 
                         LEN(REVERSE(SUBSTRING(REVERSE(PersonNameID), 1, CHARINDEX('-', REVERSE(PersonNameID))))) 
                    ELSE LEN(PersonNameID)

          END
     )
     ) AS New_PersonNameID
FROM Person

I get the output as

ABCD
ABHK
HJKK

Any modifications to the above code to get the desired output?

like image 744
user1400915 Avatar asked Oct 21 '25 05:10

user1400915


2 Answers

Use pattern matching to find the numeric ones and then work out where the numeric

SELECT
    LEFT(PersonNameID,
            CASE WHEN PersonNameID LIKE '%[0-9]%' AND CHARINDEX('-', PersonNameID) > 0
            THEN 
                CHARINDEX('-', PersonNameID)-1 
            ELSE 
                LEN(PersonNameID) 
            END) AS NewPersonId
FROM 
    Person
like image 57
Preet Sangha Avatar answered Oct 23 '25 21:10

Preet Sangha


How about something like

DECLARE @Person TABLE(
        PersonNameID VARCHAR(50)
)

INSERT INTO @Person VALUES ('ABCD-GHJI'),('ABHK-67891')

SELECT           top 100 
CASE
    WHEN CHARINDEX('-',PersonNameID ) = 0
        THEN PersonNameID
    WHEN ISNUMERIC(RIGHT(PersonNameID,LEN(PersonNameID) - CHARINDEX('-',PersonNameID ))) = 0
        THEN PersonNameID
    ELSE LEFT(PersonNameID, CHARINDEX('-',PersonNameID )-1)
END AS New_PersonNameID
from @Person

SQL Fiddle DEMO

like image 41
Adriaan Stander Avatar answered Oct 23 '25 21:10

Adriaan Stander



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!