मैं SQL Server 2008 R2 में CONCAT फ़ंक्शन का उपयोग कैसे करूं?


102

मैं CONCATSQL Server 2008 R2 में एक फ़ंक्शन की तलाश कर रहा था । मुझे इस फ़ंक्शन के लिए लिंक मिला । लेकिन जब मैं इस फ़ंक्शन का उपयोग करता हूं, तो यह निम्नलिखित त्रुटि देता है:

Msg 195, Level 15, State 10, Line 7
'CONCAT' एक मान्यता प्राप्त बिल्ट-इन फ़ंक्शन नाम नहीं है।

क्या CONCATसमारोह एसक्यूएल सर्वर 2008 R2 में मौजूद है?

यदि नहीं, तो मैं एसक्यूएल सर्वर 2008 आर 2 में तार कैसे समाहित कर सकता हूं?


@ अब मैं सिर्फ stmt निष्पादित करने का प्रयास करता हूं - चयन करें ('b', 'a')
Mitesh Budhabhatti

1
@marc_s: दस्तावेज़ीकरण में कुछ संकेत है कि यह SQL सर्वर 2012 के लिए है, लेकिन 2012 के लिए नयाCONCAT है कि कोई संकेत नहीं है ।
गाबे

1
यह अप्रत्यक्ष रूप से इंगित करता है कि यह 2012 के लिए है, लेकिन पेज खराब यूआई डिजाइन है। उन पृष्ठों पर जहां पुराने संस्करणों में कोई फ़ंक्शन IS उपलब्ध है, वहां सीधे डॉक्स के संस्करण के बगल में एक ड्रॉप डाउन है जिसे आप पढ़ रहे हैं। यदि आप यह जानते हैं, तो आप जानते हैं कि यह केवल 2012 के लिए है। यदि आप इसे नहीं जानते हैं, तो आप मितेश के समान स्थिति में समाप्त होते हैं।
जॉन

जवाबों:


70

CONCATSQL Server 2012 के लिए नया है। आपके द्वारा दिया गया लिंक यह स्पष्ट करता है, यह पिछले संस्करणों पर एक फ़ंक्शन नहीं है , जिसमें 2008 R2 शामिल है।

यह SQL सर्वर 2012 का हिस्सा है जिसे दस्तावेज़ ट्री में देखा जा सकता है:

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

EDIT मार्टिन स्मिथ मदद करता हैCONCAT कि SQL सर्वर ODBC के कार्यान्‍वयन को कार्यान्वित करता है


26
आप SELECT {fn concat ('foo', 'bar')};पिछले संस्करणों में उपयोग कर सकते हैं । केवल 2 मापदंडों को स्वीकार करता है।
मार्टिन स्मिथ

6
या बस +ऑपरेटर का उपयोग करें , जैसा कि @ lynn-langit ने अपने उत्तर में उल्लेख किया है, जिसे मैं पहली बार में पूरी तरह से याद कर रहा हूं क्योंकि मैंने केवल स्वीकृत उत्तर पढ़ा है ...
Svish

7
@Svish +बर्ताव करता है अलग ढंग से, के लिए परिणाम SELECT 'A' + 'B' + 'C'बनाम SELECT CONCAT('A', 'B', 'C')बनाम SELECT 'A' + 'B' + NULLबनाम SELECT CONCAT('A', 'B', NULL)हैं ABC, ABC, NULL,AB
ta.speot.is

@ ta.speot.is जानकर अच्छा लगा! हालाँकि मेरे मामले में कोई मामला नहीं था NULL, इसलिए बहुत +बढ़िया काम किया :)
Svish

यह उत्तर बहुत अधिक उपयोगी होगा यदि इसमें ऐसी जानकारी समाहित हो जो आपको इसके बजाय धन-चिह्न का उपयोग करना हो। समुदाय उस राय की पुष्टि करता है - @ LynnLangit के उत्तर के अपवोट्स की तुलना करें :) ओपी ने यह भी पूछा कि "मैं SQL Server 2008 R2 में स्ट्रैटेनेट कैसे करूं?"
होन्ज़ा ज़िदेक

101

पूर्णता के लिए - SQL 2008 में आप +स्ट्रिंग संकेतन करने के लिए प्लस ऑपरेटर का उपयोग करेंगे ।

पर एक नजर डालें MSDN संदर्भ नमूना कोड के साथ। SQL 2012 से शुरू होकर, आप नए CONCAT फ़ंक्शन का उपयोग करना चाह सकते हैं ।


46

मेरा सुझाव है कि आप उन्हें कॉलम करने से पहले सभी कॉलम कास्ट करें

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

यह आपके लिए काम करना चाहिए।


6
TIP: यह ध्यान रखने योग्य है कि यदि कोई varchar आकार निर्दिष्ट नहीं किया जाता है जैसे कि varchar (50), तो sql 30 के डिफ़ॉल्ट का उपयोग करेगा। यदि चर / मान कास्ट डिफ़ॉल्ट से अधिक है, तो इसे त्रुटि के बिना छोटा किया जाएगा।
स्विफ्टी

23

CONCAT, जैसा कि कहा गया है, SQL Server 2012 से पहले समर्थित नहीं है। हालांकि, आप सुझाव के अनुसार बस + ऑपरेटर का उपयोग करके संक्षिप्त कर सकते हैं। लेकिन सावधान, यह ऑपरेटर एक त्रुटि फेंक देगा यदि पहला ऑपरेंड एक संख्या है क्योंकि यह सोचता है कि जोड़ना होगा और न ही समवर्ती। इस समस्या को हल करने के लिए सामने केवल '' जोड़ें। उदाहरण के लिए

someNumber + 'someString' + .... + lastVariableToConcatenate

एक त्रुटि उठाएंगे लेकिन BUT '' + someNumber + 'someString' + ......ठीक काम करेगा।

इसके अलावा, अगर दो संख्याओं को समाप्‍त किया जाना है, तो सुनिश्चित करें कि आप उनके बीच एक '' जोड़ दें, जैसे

.... + someNumber + '' + someOtherNumber + .....

धन्यवाद, कॉलम सूची में '' + f.columnName + '' का उपयोग करना एक उपचार का काम करता है!
ल्यूक

2
@kuklei मेरे SQL सर्वर पर, SELECT 'varchar(' + 5 + ')'त्रुटि "रूपांतरण विफल हो गया है जब nvarchar मान 'varchar (' डेटा प्रकार int में कनवर्ट करते हुए" फेंकता है, इसलिए मुझे लगता है कि आपका उत्तर पकड़ में नहीं आता है।
अलेक्जेंडर

5

SQL सर्वर 2012 CONCAT फ़ंक्शन के प्रतिस्थापन प्रतिस्थापन में पूर्ण सुरक्षित ड्रॉप

SQL सर्वर 2012 :

SELECT CONCAT(data1, data2)

PRE SQL 2012 (दो समाधान) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

ये दो समाधान कई उत्कृष्ट उत्तर और अन्य पोस्टरों से टकराते हैं, जिनमें @Martin Smith, @Svish और @ vasin1987 शामिल हैं।

ये विकल्प विशिष्ट संचालन से संबंधित ऑपरेटर के अलग-अलग व्यवहार के लिए सुरक्षित संचालन के NULLलिए ''(खाली स्ट्रिंग) कास्टिंग को जोड़ते हैं ।NULL+

ध्यान दें ODBC स्केलर फ़ंक्शन समाधान 2 तर्कों तक सीमित है जबकि +ऑपरेटर दृष्टिकोण आवश्यकतानुसार कई तर्कों के लिए स्केलेबल है।

ध्यान दें कि डिफ़ॉल्ट varcharआकार के बारे में @Swifty द्वारा पहचाने जाने वाले संभावित मुद्दे को भी यहां से हटा दिया गया है varchar(MAX)


3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

यदि कोई फ़ील्ड प्रकार दूसरों से भिन्न है, तो केवल कास्ट या कनवर्ट करें।

इंसर्ट डालने पर सही जगह पर होने की जरूरत है जो आपको डालने की जरूरत है। "के रूप में" का उपयोग करना आपको एक त्रुटि देगा।

अर्थात

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))

2

हाँ फ़ंक्शन sql 2008 में नहीं है। आप ऐसा करने के लिए कास्ट ऑपरेशन का उपयोग कर सकते हैं।

उदाहरण के लिए हमारे पास employeeमेज और आप चाहते हैं nameके साथ applydate

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

Select   cast(name as varchar) + cast(applydate as varchar) from employee

यह काम करेगा जहां कॉन्कैट फ़ंक्शन काम नहीं कर रहा है।

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