2012-05-11 9 views
84

मैं SQL Server 2008 R2 में CONCAT फ़ंक्शन ढूंढ रहा था। मैं found the link for this functionमैं SQL सर्वर 2008 R2 में CONCAT फ़ंक्शन का उपयोग कैसे करूं?

Msg 195, Level 15, State 10, Line 7
'CONCAT' is not a recognized built-in function name.

CONCAT समारोह एसक्यूएल सर्वर 2008 R2 में मौजूद है: लेकिन जब मैं इस समारोह का उपयोग करें, यह निम्न त्रुटि देता है?

यदि नहीं, तो मैं SQL सर्वर 2008 R2 में तारों को कैसे जोड़ूं?

+0

@ ओडेड मैं सिर्फ stmt - select concat ('b', 'a') निष्पादित करने का प्रयास करता हूं –

+0

@marc_s: दस्तावेज़ में कुछ संकेत हैं कि यह SQL Server 2012 के लिए है, लेकिन कोई संकेत नहीं है कि 'CONCAT' 2012 के लिए * नया * है। – Gabe

+1

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

उत्तर

61

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

यह एसक्यूएल सर्वर 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) 

संपादित मार्टिन स्मिथ काम आते हुए बाहर है कि SQL Server provides an implementation of ODBC's CONCAT function इंगित करता है।

+21

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

+5

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

+3

@Svish' + 'अलग-अलग व्यवहार करता है,' चयन के लिए परिणाम 'ए' + 'बी' + 'सी' बनाम 'चयन कंकट (' ए ',' बी ',' सी ')' बनाम 'चयन' ए '+' बी '+ नूल' बनाम 'चयन कंकट (' ए ',' बी ', एनयूएलएल) 'एबीसी',' एबीसी ',' न्यूल ',' एबी' –

92

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

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

21

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

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

एक त्रुटि बढ़ा देंगे लेकिन '' + someNumber + 'someString' + ...... ठीक काम करेंगे।

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

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

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

+2

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

34

जैसे मैं आप सभी स्तंभों डाली सुझाव है इससे पहले कि आप उन्हें concat

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

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

+2

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

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

केवल किसी भी क्षेत्र का प्रकार दूसरों से अलग है या तो परिवर्तित या परिवर्तित करें।

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

यानी।एसक्यूएल सर्वर के लिए प्रतिस्थापन अनुमानों में

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

शून्य सुरक्षित बूंद 2012 concat समारोह

SQL सर्वर 2012:

SELECT CONCAT(data1, data2)

पूर्व एसक्यूएल 2012 (दो सॉल्यूशंस):

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

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

इन दो समाधान कई उत्कृष्ट जवाब और @Martin स्मिथ, @Svish और @ vasin1987 सहित अन्य पोस्टर द्वारा उठाए गए चेतावनियां मुक़ाबला। जबकि विशिष्ट ऑपरेंड से संबंधित + ऑपरेटर के अलग व्यवहार के लेखांकन

ये विकल्प NULL'' को (रिक्त स्ट्रिंग) सुरक्षित NULL से निपटने के लिए कास्टिंग जोड़ें। आवश्यकतानुसार

नोट ODBC Scaler Function समाधान जबकि + ऑपरेटर दृष्टिकोण 2 तर्कों तक ही सीमित है कई तर्क के लिए स्केलेबल है।

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

संबंधित मुद्दे