मैं SQL सर्वर में एक क्वेरी में पाठ को कैसे संक्षिप्त करूं?


80

निम्नलिखित एसक्यूएल:

SELECT notes + 'SomeText'
FROM NotesTable a 

त्रुटि दें:

डेटा प्रकार nvarchar और पाठ जोड़ें ऑपरेटर में असंगत हैं।

जवाबों:


81

एकमात्र तरीका यह होगा कि आप अपने टेक्स्ट फ़ील्ड को एक नवरचेर फ़ील्ड में परिवर्तित करें।

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

अन्यथा, मैं आपके आवेदन में सहमति बनाने का सुझाव देता हूं।


तो आप textएक "विशाल" 4000 के रूप में कास्टिंग कर रहे हैं nvarcharयह सुनिश्चित करने के लिए कि लगभग कुछ भी फिट होगा?
Matthieu

23

आप NULL मानों पर भी विचार कर सकते हैं। आपके उदाहरण में, यदि कॉलम नोट में अशक्त मूल्य है, तो परिणामी मूल्य NULL होगा। यदि आप चाहते हैं कि रिक्त मान रिक्त स्ट्रिंग्स के रूप में व्यवहार करें (ताकि उत्तर 'SomeText' निकल जाए), तो IsNull फ़ंक्शन का उपयोग करें:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a

21

यदि आप SQL सर्वर 2005 या अधिक का उपयोग कर रहे हैं, तो नोट्स फ़ील्ड में डेटा के आकार के आधार पर, आप एक विशिष्ट लंबाई के लिए कास्टिंग के बजाय nvarchar (अधिकतम) पर विचार करना चाह सकते हैं, जिसके परिणामस्वरूप स्ट्रिंग ट्रंकेशन हो सकता है।

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a

2
यह सही उत्तर होना चाहिए। यह पाठ को छोटा करने से बचता है।
बिली

क्या यह अधिक मेमोरी का उपयोग करता है या यह स्रोत आकार के लिए किसी भी तरह "ऑटो एडाप्टिंग" है?
Matthieu

6

आपको उन्हें स्पष्ट करने के लिए स्ट्रिंग प्रकारों को स्पष्ट रूप से उसी में डालना होगा, अपने मामले में आप 'SomeText' (N'SomeText) के सामने केवल एक 'N' जोड़कर समस्या को हल कर सकते हैं। यदि वह काम नहीं करता है, तो कास्ट ('SomeText' को nvarchar (8)) के रूप में आज़माएँ।



2

यदि आप SQL सर्वर 2005 (या अधिक) का उपयोग कर रहे हैं, तो आप अपनी तालिका परिभाषा में NVARCHAR (MAX) पर स्विच करने पर विचार कर सकते हैं; SQL सर्वर 2000 के TEXT, NTEXT और IMAGE डेटा प्रकार को SQL सर्वर के भविष्य के संस्करणों में पदावनत किया जाएगा। SQL सर्वर 2005 डेटा प्रकारों के लिए पिछड़ी संगतता प्रदान करता है, लेकिन आपको संभवतः इसके बजाय VARCHAR (MAX), NVARCHAR (MAX) और VARBINARY (MAX) का उपयोग करना चाहिए।

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