मुझे स्ट्रिंग से सबस्ट्रिंग का एक हिस्सा निकालने की ज़रूरत है जो नीचे के अनुसार है।

YY_12.Yellow
ABC_WSA.Thisone_A
SS_4MON.DHHE_A_A

मुझे नीचे के अनुसार स्ट्रिंग निकालने की आवश्यकता है

Yellow
Thisone
DHHE
1
Babulal 10 जिंदा 2018, 13:54

4 जवाब

सबसे बढ़िया उत्तर

आप कुछ इस तरह इस्तेमाल कर सकते हैं:

declare @tbl table (col nvarchar(100));
insert @tbl values ('YY_12.Yellow'), ('ABC_WSA.Thisone_A'), ('SS_4MON.DHHE_A_A')

select *
    , charindex('_', col2, 0)
    , left(col2, 
               case 
                   when charindex('_', col2, 0) - 1 > 0 
                       then charindex('_', col2, 0) - 1 
                   else len(col2) 
               end) [result]
from (
select col
    , substring(col, charindex('.', col, 0) + 1, len(col)) [col2]
from @tbl ) rs

मैं पूरा कोड छोड़ने जा रहा हूं ताकि आप उम्मीद से समझ सकें कि मैंने क्या किया।

  1. पहले डॉट तक सब कुछ पहचानें और हटाएं "।" (नेस्टेड SELECT में [col2] कॉलम में)
  2. फिर मैं उस SELECT को घोंसला बनाता हूं ताकि मैं पहले SELECT से परिणाम कॉलम पर एक नया तर्क बहुत आसान लागू कर सकूं जिससे मैं केवल सब कुछ अंडरस्कोर "_" तक रखता हूं
  3. अंतिम परिणाम [result] कॉलम में संग्रहीत किया जाता है
1
Radu Gheorghiu 10 जिंदा 2018, 14:18

आप SQL Server 2012 से उपलब्ध parsename() फ़ंक्शन के साथ भी प्रयास कर सकते हैं

select Name, left(parsename(Name,1), 
                 case when charindex('_', parsename(Name,1)) > 0 
                      then charindex('_', parsename(Name,1))-1 
                      else len(parsename(Name,1)) 
                 end) [ExtrectedName] from table

यह मानता है कि . के बाद नाम पढ़ने के लिए आपके पास हमेशा . है

नतीजा :

Name              ExtrectedName
YY_12.Yellow      Yellow
ABC_WSA.Thisone_A Thisone
SS_4MON.DHHE_A_A  DHHE
1
Yogesh Sharma 10 जिंदा 2018, 14:18

ये कोशिश करें:

CREATE TABLE app (info varchar(20))
INSERT INTO app VALUES
('YY_12.Yellow'),
('ABC_WSA.Thisone_A'),
('SS_4MON.DHHE_A_A'),
('testnopoint')

SELECT 
    CASE
        WHEN CHARINDEX('.', info) > 0 THEN 
        CASE 
            WHEN CHARINDEX('_', info, CHARINDEX('.', info) + 1) > 0 THEN
            SUBSTRING(info, CHARINDEX('.', info) + 1, CHARINDEX('_', info, CHARINDEX('.', info) + 1) - CHARINDEX('.', info) - 1)
            ELSE
            SUBSTRING(info, CHARINDEX('.', info) + 1, LEN(info))
         END
    END
FROM app

मेरी क्वेरी, यदि . मौजूद नहीं है तो रिटर्न NULL, यदि आप रिटर्न चाहते हैं तो सभी स्ट्रिंग CASE स्टेटमेंट को हटा दें

SqlFiddle पर जाएं

1
Joe Taras 10 जिंदा 2018, 14:14

इसे आजमाएं, STUFF यहां इस्तेमाल किया गया

SELECT  LEFT(STUFF(col,1,CHARINDEX('.',col),''),
                CHARINDEX('_',STUFF(col,1,CHARINDEX('.',col),'')+'_')-1
            )
FROM    @table

आउटपुट:-

Yellow
Thisone
DHHE
1
Abdul Rasheed 10 जिंदा 2018, 14:33