2011-12-17 9 views
17

मैं MySQL से SQL Server 2008 एक्सप्रेस में स्विच कर रहा हूं और एक CONCAT() - एस्क्यू फ़ंक्शन नहीं ढूंढ सकता। मेरे पास दो कॉलम हैं जो मैं एक स्ट्रिंग में गठबंधन करने और अद्वितीय संयोजन खोजने की कोशिश कर रहा हूं।एसक्यूएल सर्वर 2008 एक्सप्रेस CONCAT() मौजूद नहीं है?

id1   id2 
001   abc1 
002   qrs5 
003   qrs5 
003   abc1 
...   ... 

मैं निम्नलिखित का प्रयास करते हैं:

select id1, id2, concat(id1, ", ", id2) as combo1 
    FROM db1 
    group by combo1 

मैं मिल निम्न त्रुटि संदेश:

संदेश 195, स्तर 15, राज्य 10, पंक्ति 1
'concat' है एक मान्यता प्राप्त अंतर्निहित फ़ंक्शन नाम नहीं।

कोई सुझाव?

+1

[अगला संस्करण एक 'CONCAT' समारोह होगा] (http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/concat-function-in-sql-server) –

+1

यह संभवत: यह ध्यान देने योग्य है कि MySQL में 'concat'' जब कोई तर्क 'शून्य' है (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat) , जबकि मांग के लिए एमएस एसक्यूएल 'कॉन्सैट' [खाली स्ट्रिंग्स को नल को परिवर्तित करता है] (http://msdn.microsoft.com/en-us/library/hh231515.aspx) संगतता से पहले और कभी भी 'शून्य' नहीं देता है, इसलिए यहां तक ​​कि यद्यपि हमारे पास अब यह है, लेकिन इसका उपयोग ओएस के MySQL को MSSQL पर पोर्ट करने के लक्ष्य के लिए नहीं किया जा सकता है। – GSerg

उत्तर

34

हो सकता है कि कुछ की तरह,

SELECT DISTINCT id1, id2, id1 + ', ' + id2 

होगा कि काम करता है?

+0

ऐसा मत सोचो। आईडी 1 और आईडी 2 में ओवरलैप हैं। मुझे अद्वितीय स्ट्रिंग की आवश्यकता है, न कि सिर्फ id1। – screechOwl

+7

@screechOwl: क्या बासम सुझाव दे रहा है केवल 'CONCAT() 'के लिए एक प्रतिस्थापन है। यह वही काम करता है: '+' का अर्थ है टी-एसक्यूएल में कॉन्सटेनेशन जब ऑपरेंड स्ट्रिंग होते हैं। –

+0

मैं CONCAT को देख रहा हूं और ऐसा लगता है कि यह अपने आप पर विशिष्टता का पता नहीं लगा रहा है .. आपके नमूना डेटा में आपका कोई अनूठा इनपुट नहीं हो सकता है, और इसके परिणामस्वरूप आपको क्या चाहिए, हम शायद मदद कर सकते हैं आप –

27

आप कोष्ठक में लपेटकर द्वारा एसक्यूएल 2008 (यदि आप वास्तव में चाहते हैं) में concat का उपयोग कर सकते

{fn CONCAT(id1,id2)} AS combo1 

नोट: concat केवल दो तर्क लेता है, तो आप दो से अधिक तार जोड़ करना चाहते हैं तो आप घोंसला उन्हें चाहिए :

{fn CONCAT(id1,{fn CONCAT(id2,id3)})} AS combo2 
+2

उपयोगकर्ता, वास्तव में सवाल का जवाब देने के लिए धन्यवाद। – Stanton

+0

यह काम करता है। लेकिन वास्तव में इसका क्या अर्थ है? और 2012 के संस्करण को कैसे प्रभावित करता है, अगर ऐसा होता है? – Calin

+0

यह ओडीबीसी सिंटैक्स अधिक जानकारी है [यहां] (http://msdn.microsoft.com/en-us/library/0fasyf1c%28v=vs.71%29.aspx), मुझे 2012 पर यकीन नहीं है। – user2054797

4

CONCAT एसक्यूएल सर्वर 2008 में मौजूद नहीं है, यह 2012

इसके बजाय आप इस्तेमाल कर सकते हैं एसक्यूएल सर्वर के बाद से नया है:

select id1, id2, id1 + ", " + id2 as combo1 
FROM db1 
group by combo1 
संबंधित मुद्दे