2011-06-06 15 views
17

मैं क्वेरी चलाने और उदाहरण के लिए उत्पादन को देखते हैं, के बादसम्मिलित दोहरे उद्धरण चिह्नों

select * from People

मेरे आउटपुट के रूप में

First Last  Email 
Ray  Smith  [email protected] 

इस प्रकार मैं इतना है कि इस डेटा कैसे निर्यात होता है ऐसा लगता है?

"Ray","Smith","[email protected]" 

या उद्धरण रखने के लिए रिकॉर्ड संशोधित करने के लिए एसक्यूएल के भीतर ऐसा करने का कोई तरीका है?

क्योंकि जब आप निर्यात करते हैं, तो यह कॉमा को वैसे भी शामिल करने जा रहा है, है ना?

+4

मुझे आश्चर्य है कि उद्धरण रखने के लिए * रिकॉर्ड * को संशोधित करने के बारे में एक प्रश्न उठाया गया है, इसलिए सीएसवी को निर्यात करना "आसान" है ... – Blindy

+1

सीएसवी को निर्यात - http://stackoverflow.com/questions/425379/how-to -export-data-as-csv-format-from-sql-server-use-sqlcmd –

+0

मैं अपनी टिप्पणी में दिए गए निहितार्थ @ ब्लिंडी से सहमत हूं: CSV को निर्यात करने के लिए रिकॉर्ड को न बदलें। 'उन लोगों से' चुनें * जैसे अंतिम विवरण '' एंडर% '' ' क्या एसक्यूएल का आपका स्वाद एक सीएसवी निर्यात करता है, तो आप से अधिक के साथ सौदा करने जा रहे हैं? उनमें से कई करते हैं, और आपको स्वयं को घुमाने के बजाय अंतर्निहित निर्यात फ़ंक्शन का उपयोग करना अधिक आसान लगेगा। यदि आप माइक्रोसॉफ्ट टी-एसक्यूएल का उपयोग कर रहे हैं, तो निर्यात-टू-सीएसवी स्क्रिप्ट के लिए http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=87448 पर एक नज़र डालें। – rajah9

उत्तर

20

यदि आपके द्वारा रुचि रखने वाले कॉलम 128 वर्ण या उससे कम हैं, तो आप QUOTENAME फ़ंक्शन का उपयोग कर सकते हैं। इसके साथ सावधान रहें क्योंकि 128 से अधिक वर्ण NULL वापस आ जाएंगे।

SELECT QUOTENAME(First, '"'), QUOTENAME(Last, '"'), QUOTENAME(Email, '"') 
    FROM People 
+0

मुझे लगता है कि वह एक कॉलम में आउटपुट चाहता है, जो अल्पविराम से अलग होता है। – Blindy

+0

@ ब्लिंडी: यह स्पष्ट नहीं है। सवाल में, ओपी कहता है "क्योंकि जब आप निर्यात करते हैं, तो यह वैसे भी अल्पविराम शामिल करने जा रहा है"। –

+0

@ ब्लिंडी - मुझे लगता है कि वह उन्हें अलग कॉलम में चाहता है। –

3
select '"'+first+'","'+last+'","'+email+'"' 
from people 

इस बात की तरह सबसे अच्छा तथापि कोड में किया है, तो आप प्रस्तुति के लिए नहीं क्वेरी चाहिए।

+0

सुंदर मजबूत कथन। ऐसे समय होते हैं जब एसक्यूएल में स्वरूपण बेहद उपयोगी होता है, जिससे रिकॉर्डसेट से बाध्य नियंत्रण में प्रत्यक्ष स्थानांतरण होता है। एक अन्य उदाहरण एसक्यूएल सर्वर में डंपिंग फाइलों के लिए जीयूआई उपकरण होगा, जहां फ़ाइल में पूछे जाने वाले प्रश्नों को ठीक से समाप्त किया गया है, इसलिए सभी प्रारूपण SQL में किया जाना चाहिए। – mike

+0

पहला उदाहरण बिल्कुल वैसा ही है जिसके बारे में मैं बात कर रहा हूं, यह सुनिश्चित करने के लिए डेटाबेस परत का काम नहीं है कि आपका दृश्य सही डेटा प्रदर्शित करता है, यह उस संरचित डेटा को प्रस्तुत करने के लिए दृश्य का काम है। उदाहरण के लिए, डब्ल्यूपीएफ में, यह मॉडल के लिए बाध्यकारी और कनवर्टर का उपयोग करके किया जाएगा। दूसरा उदाहरण एक अपवाद है, मैं सहमत हूं कि इसमें आप केवल एक परत की बजाय SQL कथन का उपयोग स्वयं अनुप्रयोग के रूप में कर रहे हैं। – Blindy

2

चयन concat ("\" "पहले," \ "", "\" ", अंतिम," \ "", "\" ", ईमेल," \ "") एक ही में सभी

रूप
+0

SQL सर्वर में काम नहीं करेगा। –

+0

क्षमा करें - लेकिन एसक्यूएल एक जैसा होना चाहिए - फ़ंक्शन नाम में केवल अंतर – Mike

+0

केवल एसक्यूएल 2012, 2008 में काम करता है जिसमें कॉन्सट फ़ंक्शन नहीं है। – Fourth

1

संशोधित करना उद्धरण रखने के लिए रिकॉर्ड एक आपदा होगी; आप केवल निर्यात के लिए डेटा का उपयोग नहीं करते हैं। इसके अलावा, सिद्धांत में आपको नामों से निपटना होगा:

Thomas "The Alley Cat" O'Malley 

जो कुछ समस्याएं प्रस्तुत करता है।

मानक SQL में, आप दोगुनी-अप एकल उद्धरण का उपयोग करें एकल उद्धरण संलग्न करने (दोहरे उद्धरण चिह्नों के लिए कोई विशेष उपचार के साथ):

'"Thomas "The Alley Cat" O''Malley"' 

कुछ डीबीएमएस आप तार को दोहरे उद्धरण चिह्नों का उपयोग करने की अनुमति (में स्टैंडर्ड एसक्यूएल, डबल कोट एक 'सीमांकित पहचानकर्ता' से संकेत मिलता है; एसक्यूएल सर्वर उस के लिए वर्ग कोष्ठक), जिस स्थिति में आप स्ट्रिंग में लिख सकते हैं के रूप में उपयोग करता है:

"""Thomas ""The Alley Cat"" O'Malley""" 

आम तौर पर है, हालांकि, अपने निर्यातक उपकरण सीएसवी उत्पादन स्वरूपण प्रदान और आपके एसक्यूएल कथन को खराब करने की आवश्यकता नहीं है इसके बारे में आरई। एम्बेडेड उद्धरण कुछ और समस्याग्रस्त बनाते हैं। दरअसल, आपको आमतौर पर डेटा के स्वरूपण के साथ डीबीएमएस सौदे नहीं करना चाहिए।

0

यह मेरे लिए सबसे अच्छा काम किया

SELECT 'UPDATE [dbo].[DirTree1] SET FLD2UPDATE=',QUOTENAME(FLD2UPDATE,'''') 
+' WHERE KEYFLD='+QUOTENAME(KEYFLD,'''') 
FROM [dbo].[Table1] 
WHERE SUBSTRING(FLD2UPDATE,1,2) = 'MX' 
order by 2 
0

आप उपयोग कर रहे हैं एमएस एसक्यूएल सर्वर, जैसे कुछ प्रयास करें:

SELECT '"'||Table.Column||'"' 
    FROM Table 

- ध्यान दें कि "का चयन करें" और "के बीच पहला 3 अक्षरों | | " हैं: '' '

- अंत में "||" के बाद वर्ण समान हैं ... इस तरह आपको अपने मूल्य के प्रत्येक पक्ष पर "मिलता है।

+0

कई गलतियाँ, आप सरल उद्धरणों का उपयोग करते हैं, फिर डबल कोट्स, आप कहते हैं कि रिक्त स्थान हैं और कोई भी नहीं है ... अनुसरण करना मुश्किल है। – Fabien

+0

स्टैक ओवरफ़्लो में आपका स्वागत है। चार रिक्त स्थान के साथ इंडेंट लाइनें कोड के रूप में दिखाती हैं - शाब्दिक मूल्यों के रूप में। यह आसान है 'आपको यह बताने की ज़रूरत नहीं है कि कौन से पात्र कहां जाते हैं। –

+0

उत्तर अब @Fabien संपादित किया गया है यदि इसे सही होने के लिए अधिक काम की आवश्यकता है, तो कृपया किसी भी शेष त्रुटि को इंगित करें। –

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

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