2009-09-03 21 views
15

में स्ट्रिंग कॉन्सटेनेशन ऑपरेटर ओरेकल, पोस्टग्रेस और एसक्यूएल सर्वर में कॉन्सटेनेशन के लिए एक आम ऑपरेटर रखने का कोई तरीका है।ओरेकल, पोस्टग्रेस और एसक्यूएल सर्वर

ओरेकल में हम '|' का उपयोग करते हैं, पोस्टग्रेज़ '||' का उपयोग करता है और एसक्यूएल सर्वर '+' का उपयोग करता है।

स्ट्रिंग concatenation का समर्थन करने के लिए कस्टम ऑपरेटर '+' जोड़कर मैंने पोस्टग्रेज़ में समस्या हल कर दी है।

'+' ऑपरेटर का उपयोग करके स्ट्रिंग concatenation का समर्थन करने के लिए ओरेकल में एक ही ऑपरेटर जोड़ने का कोई तरीका है।

+0

सभी डेटाबेस में एक ही वाक्यविन्यास क्यों होना चाहिए? अगर वे सभी एक जैसे थे, तो केवल एक ही होगा। आवेदन भाषाओं में सभी अलग वाक्यविन्यास हैं? –

+10

सभी सी संकलक एक ही वाक्यविन्यास को पार्स करते हैं, एसक्यूएल पार्सर्स को ऐसा क्यों नहीं करना चाहिए? – ijw

+1

एसक्यूएल सर्वर और साइबेस टीएसक्यूएल भाषा का उपयोग करते हैं और ओरेकल पीएल/एसक्यूएल भाषा का उपयोग करता है। टीएसक्यूएल पीएल/एसक्यूएल से अलग है। –

उत्तर

8

'||' निश्चित रूप से ओरेकल में काम करता है, हालांकि स्पष्ट रूप से SQL सर्वर नहीं है।

से पहले:

sql-shell-command < sql-file.sql 

आप SQL स्क्रिप्ट अप फिक्सिंग कर रहे हैं, मैं निम्नलिखित समाधान पर विचार करेंगे: (SQL Dialects Reference जो लोग हमें के बाद आने के लिए, यहाँ एसक्यूएल के लिए एक rosetta पत्थर है) (एसक्यूएल-फ़ाइल '+' ऑपरेटरों)

के बाद:

ansi-sql-shell-command < sql-file.sql 


sed -e 's/||/\+/' < sql-file.sql | ms-sql-shell-command 

(एसक्यूएल-फाइल में '||' ऑपरेटर हैं, आपको अपनी फाइलों को कन्वर्ट करना होगा)

विचार यह है कि आप एक प्रारूप में एसक्यूएल के साथ शुरू करते हैं, और विशेष मामले के लिए, आप उस पर एक फ़िल्टर चलाते हैं इसे दूसरे प्रारूप में बदल दें। सैद्धांतिक रूप से, आप सभी '+' es को '||' में बदल सकते हैं, लेकिन चूंकि उनमें से एक अच्छा अनुपात स्ट्रिंग-कॉन्सटेनेशन के बजाय संख्यात्मक-जोड़ हो सकता है, यह भी काम करने की संभावना नहीं है।

आपके फ़िल्टर की जटिलता आप जो कर रहे हैं उस पर निर्भर करती है। यदि आपके SQL में मनमाने ढंग से डेटा है, तो आपको तारों में प्रतिस्थापन से बचने के लिए इसे प्राप्त करना होगा। लेकिन अगर आप विचार स्थापित कर रहे हैं तो यह शायद ठीक रहेगा।

आप उन तकनीकों में एक ही तकनीक का उपयोग कर सकते हैं जहां एसक्यूएल स्ट्रिंग्स में है - इसे एक फॉर्म से दूसरे रूप में बदलने के लिए प्रोग्राम में एक फ़ंक्शन लिखें।

+1

के बीच स्पष्ट अंतर बनाता है एसक्यूएल सेवर –

+0

पर काम नहीं करेगा लिंक काम नहीं कर रहा है ... = ( –

+1

@Will, मेरे संपादन के बाद, लिंक अब काम करता है –

20

आप ओरेकल में ऑपरेटरों को अधिभारित नहीं कर सकते हैं। ओरेकल स्वचालित प्रकार रूपांतरण ('1' + '1' = 2) करता है, क्योंकि "+" ओवरलोड वैसे भी काम नहीं करेगा।

ओरेकल द्वारा उपयोग किए गए कॉन्सटेनेशन ऑपरेटर || है, जो एएनएसआई-अनुरूप भी है।

CONCAT फ़ंक्शन भी है (पोस्टग्रेस 9.0 और SQL सर्वर 2012 के रूप में) उन सभी तीन आरडीबीएमएस द्वारा समर्थित है जिनकी आपको आवश्यकता है।

ध्यान दें कि CONCAT का ओरेकल संस्करण अन्य दो की तरह भिन्न नहीं है। आप घोंसला करने की आवश्यकता होगी आप तीन या अधिक तार जोड़ करने की जरूरत है:

CONCAT(s1,CONCAT(s2,s3)) 
+4

MySQL CONCAT() फ़ंक्शन का समर्थन करता है लेकिन PostgreSQL और SQL सर्वर नहीं करता है। कम से कम, बॉक्स से बाहर नहीं: उन्हें संग्रहीत प्रक्रियाओं के रूप में बनाया जा सकता है। – APC

+1

समस्या यह है कि मेरी वर्तमान परियोजना अधिकांश स्थानों में स्ट्रिंग कॉन्सटेनेशन ऑपरेटर के रूप में '+' का उपयोग करती है। यह पोस्टग्रेस ans sql सर्वर दोनों के साथ काम करता है। अब हम चाहते हैं कि परियोजना ऑरैकल के साथ भी काम करे यही कारण है कि मुझे ओरेकल में काम करने के लिए '+' की आवश्यकता है। अगर यह काम नहीं कर रहा है तो हमें अपने अधिकांश कोड को बदलना होगा जहां हम 'सामान्य' ऑपरेटर को '+' का उपयोग करते हैं, यदि यह सभी स्थानों पर काम करता है । मैं एक समाधान की आवश्यकता है जो मौजूदा सिस्टम –

+1

में अधिक परिवर्तन किए बिना 3 डेटाबेस में काम करेगी यह फ़ंक्शन PostgreSQL 9 में भी उपलब्ध है: http://www.postgresql.org/docs/9.1/static/functions-string.html – FGM

25

|| एसक्यूएल स्टैंडर्ड संयोजन ऑपरेटर (: 5.2 एसक्यूएल 2008) है। इसका उपयोग करें, और शिकायत करें कि यह आपके द्वारा उपयोग किए जा रहे सिस्टम में काम नहीं करता है ;-)

गंभीरता से, आपको अन्य सिस्टम || का उपयोग करना चाहिए, + नहीं।न केवल यह अधिक मानक है, लेकिन अगर आप + का उपयोग करते हैं तो गलती से भ्रम पैदा करना आसान होता है, खासकर यदि किसी भी प्रकार का अनुमान लगाया जाना चाहिए या निहित कास्ट हो रहा है।

पर विचार करें: '5' + 2

प्रणाली का उपयोग कर रहे हैं कि एक पर एक त्रुटि फेंक नहीं है, और + दोनों प्लस और संयोजन का मतलब है, तो आप में कुछ भ्रामक परिणामों के लिए हो सकता है।

+3

तो, माइक्रोसॉफ्ट हर किसी के समान मानक का समर्थन नहीं करता है, और उसे एमएस से शिकायत करनी चाहिए और उन्हें अपने तरीके बदलने के लिए कहना चाहिए। हाँ, यह काम करेगा ... ;-) – ijw

+7

@ijw, या बस एक बेहतर डेटाबेस में "अपग्रेड करें" :) – Cerin

+0

यहां शिकायत करें: https://connect.microsoft.com/SQLServer/feedback/details/259291/support आईएसओ-9075-मानक स्ट्रिंग-संयोजन-डबल पाइप – codekaizen

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