2009-01-02 6 views
11

हमारे पास varchar2(100) कॉलम वाला एक टेबल है, जिसमें कभी-कभी कैरिज-रिटर्न & लाइन-फ़ीड्स होता है। हमें SQL क्वेरी में उन वर्णों को हटाना चाहिए। हम प्रयोग कर रहे हैं:ओरेकल रेप्लेस() फ़ंक्शन कैरिज-रिटर्न और लाइन-फ़ीड्स को संभालने वाला नहीं है

REPLACE(col_name, CHR(10)) 

जो है कोई प्रभाव नहीं, हालांकि 'CHR (10)' की जगह एक और अधिक परंपरागत 'पत्र' चरित्र के लिए साबित होता है कि REPLACE समारोह अन्यथा काम करता है। हम यह भी पाया गया कि

REPLACE(col_name, CHR(10), '_') 

पाता स्थान नई लाइन की, लेकिन आवेषण अंडरस्कोर के बाद, बल्कि यह जगह से है।

ओरेकल 8i पर चल रहा है। उन्नयन एक विकल्प नहीं है।

उत्तर

31

एक और तरीका है उपयोग करने के लिए है TRANSLATE:

TRANSLATE (col_name, 'x'||CHR(10)||CHR(13), 'x') 

'एक्स' किसी भी चरित्र है कि आप अशक्त में अनुवाद करना चाहते हैं नहीं है, क्योंकि का अनुवाद सही अगर काम नहीं करता है तीसरा पैरामीटर शून्य है।

+0

के मामले में कॉलम की वास्तविक सामग्री की जांच करने के लिए DUMP() फ़ंक्शन एक अच्छा तरीका है, क्या आप विस्तृत कर सकते हैं कोड का 'x'' हिस्सा? मैं पीछा नहीं कर रहा हूँ। मैं समझता हूं कि आपको प्रतिस्थापन निर्दिष्ट करने की आवश्यकता है, लेकिन आपको दूसरे तर्क की शुरुआत में प्रतिस्थापन को शामिल करने की आवश्यकता क्यों है? –

+1

यदि आप 'ट्रान्सलेट (col_name, सीएचआर (10) || सीएचआर (13), शून्य) लिखते हैं, तो यह काम नहीं करेगा - यह हमेशा न्यूल (शून्य प्रबंधन का एक quirk) वापस आ जाएगा। यदि आप 'ट्रान्सलेट (col_name, सीएचआर (10) || सीएचआर (13),' x ') लिखते हैं, तो यह प्रत्येक सीएचआर (10) से' x 'को परिवर्तित करेगा, जो वांछित नहीं है। यदि हम दोनों 'एक्स' के साथ दोनों तर्कों को उपसर्ग करते हैं तो यह वांछित परिणाम देकर 'x' से 'x' और CHR (10), सीएचआर (13) को शून्य में अनुवाद करेगा। –

+0

गोटा, इसलिए संदर्भ के इस भाग का अर्थ है 'इस मामले में, से_स्टिंग के अंत में अतिरिक्त वर्णों में to_string में कोई संबंधित वर्ण नहीं है। यदि ये अतिरिक्त वर्ण चार में दिखाई देते हैं, तो उन्हें वापसी मूल्य से निकाल दिया जाता है। धन्यवाद! –

12

क्या आप सुनिश्चित हैं कि आपकी नई लाइन CHR(13) + CHR(10) नहीं है, इस मामले में, आप CHR(13) + '_' के साथ समाप्त हो रहे हैं, जो अभी भी एक नई लाइन की तरह दिख सकता है?

REPLACE(col_name, CHR(13) + CHR(10), '')

+0

इसके लिए धन्यवाद, यह वास्तव में मेरी मदद करता है। मुझे एक सीएसवी का उपयोग करके बाहरी सिस्टम में कुछ डेटाबेस सामग्री निर्यात करना पड़ा था (मैंने इसे नहीं चुना ...), और मैं कैरिज रिटर्न को एक साधारण डॉट में कनवर्ट करना चाहता था। बस यह जोड़ना चाहता था कि मेरे पास "+" चिह्न के साथ एक वाक्यविन्यास त्रुटि थी और इसे "||" के साथ बदलना पड़ा इस तरह: 'स्थान (col_name, सीएचआर (13) || सीएचआर (10),' ') ' –

5

प्रयास करें अपने डेटाबेस में डेटा HTML प्रपत्र TextArea नियंत्रण से पोस्ट किया जाता है, विभिन्न ब्राउज़रों अलग नई लाइन वर्णों का उपयोग:

फ़ायरफ़ॉक्स CHR साथ लाइनों (10) केवल

इंटरनेट को अलग करती है एक्सप्लोरर Chr (13) + CHR साथ लाइनों को अलग करती है (10)

एप्पल (पूर्व OSX) Chr (13) के साथ लाइनों केवल

अलग करती है 10

तो आपको कुछ की आवश्यकता हो सकती है:

set col_name = replace(replace(col_name, CHR(13), ''), CHR(10), '') 
15

अहह! कैड पैसे पर है।

TOAD में एक आर्टिफैक्ट \r\n दो प्लेसहोल्डर 'ब्लॉब' वर्णों के रूप में प्रिंट करता है, लेकिन एक ही \r को दो प्लेसहोल्डर्स के रूप में प्रिंट करता है। एक समाधान की ओर 1 कदम का उपयोग करने के .. जो किसी भी क्रम में पात्रों को ठेस पकड़ता है

REPLACE(col_name, CHR(13) || CHR(10)) 

.. लेकिन .. मैं थोड़ा और अधिक मजबूत के लिए चुना ..

REPLACE(REPLACE(col_name, CHR(10)), CHR(13)) 

। कैड के लिए मेरा बहुत धन्यवाद।

एम

+0

संदेह –

0

यदि आपका न्यूलाइन चरित्र CRLF है, तो इसका मतलब है कि यह CHR(13) है जिसके बाद CHR(10) है। यदि आप REPLACE(input, CHR(10), '_'), जो CHR(13) में अंडरस्कोर के बाद बदल जाता है।चूंकि CR अपने आप पर ही एक न्यूलाइन चरित्र के रूप में प्रस्तुत किया जा सकता है, तो आपको दिखाई देगा जैसे कि अंडरस्कोर ने आपकी नई लाइन के बाद बेन डाला है, लेकिन वास्तव में आपकी नई लाइन का केवल आधा बदल दिया गया है।

सभी CR और LF की जगह बदलने के लिए REPLACE(REPLACE(input, CHR(13)), CHR(10)) का उपयोग करें।

1

बस एक नोट छोड़ना चाहता था। मुझे एक पाठ 4000 फ़ील्ड को स्वरूपित करने में परेशानी हो रही थी, जिसकी खुद का दिमाग था और पाठ रिपोर्ट पर यादृच्छिक रूप से रैप (या लपेट नहीं) लग रहा था। जब मैंने ऊपर वर्णित प्रतिस्थापन chr (10) का उपयोग करके कॉलम को अपडेट किया। अंत में मेरी रिपोर्ट के रूप में स्वरूपित किया गया था। बहुत से Thanx!

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