SQL सर्वर का उपयोग करके स्ट्रिंग को कैसे छोटा करें


105

मैं SQL सर्वर में बड़ी स्ट्रिंग है। मैं उस स्ट्रिंग को 10 या 15 कैरेक्टर में बदलना चाहता हूं

मूल तार

this is test string. this is test string. this is test string. this is test string.

वांछित स्ट्रिंग

this is test string. this is ......

1
आपके "वांछित स्ट्रिंग" में "मूल स्ट्रिंग" के 28 अक्षर शामिल हैं, "10 या 15" के करीब नहीं
के.एम.

जवाबों:


158

यदि आप केवल अपनी लंबी स्ट्रिंग के कुछ वर्ण वापस करना चाहते हैं, तो आप उपयोग कर सकते हैं:

select 
  left(col, 15) + '...' col
from yourtable

SQL फिडेल को डेमो के साथ देखें ।

यह स्ट्रिंग के पहले 15 वर्णों को लौटाएगा और फिर ...इसे समाप्त करने के लिए सहमति देगा।

यदि आप यह सुनिश्चित करना चाहते हैं कि स्ट्रिंग्स 15 से कम न मिले ...तो आप उपयोग कर सकते हैं:

select 
  case 
    when len(col)>=15
    then left(col, 15) + '...' 
    else col end col
from yourtable

SQL फिडेल को डेमो के साथ देखें


2
यदि मूल स्ट्रिंग कम है, तो 15 वर्ण हैं, फिर भी ...जब आप इसे लागू नहीं करते हैं , तो आप संलग्न हो जाते हैं
के.एम.

@KM। एक संस्करण जोड़ा गया है जो स्ट्रिंग की लंबाई की जांच करेगा
टैरिन

2
यदि कर्नल लंबाई में ठीक 15 वर्ष का है, तो उसे बाईं ओर करते समय पूरी स्ट्रिंग मिलेगी (कॉलन, 15) और फिर अंत में '...' डालें। निश्चित रूप से एक बेहतर समाधान 'जब लेन (कॉल)> 15' की जाँच कर रहा है।
मर्फ़ब्रोब 2

35

आप उपयोग कर सकते हैं

LEFT(column, length)

या

SUBSTRING(column, start index, length)

83
यह एसओ सवाल अब सबसे आसान तरीका है कि कैसे tsql में एक स्ट्रिंग को काट दिया जाए। अगर इस व्यक्ति ने यह नहीं पूछा होता, तो मैं कुछ MSDN लेख के माध्यम से
फंस जाता

4
@snaplemouton सरल चीजों के बारे में सवाल पूछना "बुरा" हो सकता है (जैसा कि उत्तर में पहले पता लगाना आसान था), लेकिन परिणाम वैसे भी अच्छा है। मेरा मतलब है कि SO का मतलब सभी तरह के सवालों के जवाब देना है (यहाँ तक कि सामान को खोजने के बारे में पूछना भी आसान है)।
जाहू

8
@snaplemouton; लगता है क्या, जब इस सवाल / जवाब की खोज परिणामों के शीर्ष पर थी जो मुझे बहुत समय बचाती है।
एमीसिको

9
साथ ही, MSDN नहीं वाक्यांश शब्द का उपयोग कर या तो समारोह का वर्णन करता है TRUNCATE
pablete

4
@snaplemouton, मुझे यह उत्तर Google पर मिला। कृपया StackOverflow पर लोगों को Google की बातें बताना बंद करें, क्योंकि भविष्य में Googler इसे देखेंगे। Google परिणामों में दिखाने के लिए यह साइट बड़े हिस्से में मौजूद है।
स्लॉथारियो

4

मुझे लगता है कि यहां उत्तर बहुत अच्छे हैं, लेकिन मैं एक परिदृश्य जोड़ना चाहूंगा।

कई बार मैं इसकी लंबाई के बारे में चिंता किए बिना, एक स्ट्रिंग के सामने से पात्रों की एक निश्चित राशि लेना चाहता हूं। RIGHT () और SUBSTRING () के साथ ऐसा करने के कई तरीके हैं, लेकिन उन सभी को स्ट्रिंग की लंबाई जानने की आवश्यकता है जो कभी-कभी चीजों को धीमा कर सकती हैं।

मैंने इसके बजाय STUFF () फ़ंक्शन का उपयोग किया है:

SET @Result = STUFF(@Result, 1, @LengthToRemove, '')

यह खाली स्ट्रिंग के साथ अनावश्यक स्ट्रिंग की लंबाई को प्रतिस्थापित करता है।


4

आप कास्ट () ऑपरेशन का उपयोग भी कर सकते हैं:

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name

मुझे यह सबसे अच्छा लगता है जब एक टेक्स्ट फ़ाइल में आउटपुट किया जाता है क्योंकि आउटपुट टेक्स्ट फ़ाइल में केवल नए वर्णों को उस कॉलम के लिए आवंटित किया जाता है। (जैसे 1000 के बजाय 50) अधिक कॉम्पैक्ट परिणामों के लिए।
BillDarcy

1

आप नीचे का उपयोग भी कर सकते हैं, आईआईएफ केस स्टेटमेंट से बचता है और आवश्यकता होने पर केवल इलिप्स जोड़ता है (केवल SQL सर्वर 2012 और बाद में अच्छा है) और केस स्टेटमेंट अधिक एएनएसआई अनुरूप (लेकिन अधिक क्रिया) है

SELECT 
  col, LEN(col), 
  col2, LEN(col2), 
  col3, LEN(col3) FROM (
  SELECT 
    col, 
    LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2, 
    LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3 
  from (
      select 'this is a long string. One that is longer than 15 characters' as col
      UNION 
      SELECT 'short string' AS col
      UNION 
      SELECT 'string==15 char' AS col
      UNION 
      SELECT NULL AS col
      UNION 
      SELECT '' AS col
) x
) y

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.