SQL सर्वर पर स्ट्रिंग करने के लिए varbinary


94

से एक कॉलम मान कैसे परिवर्तित करें varbinary(max) को varcharमानव-पठनीय रूप जाए ?


3
मैं varchar चाहते के बाद से मूल्य स्ट्रिंग मान से isterted गया था .. मैं पढ़ने के लिए क्या लिखा गया था मतलब ..
Bilgin Kılıç

@MartinSmith पीपीएल मुझे बदलने के लिए धक्का। इसलिए अपने उत्तर को फिर से चिह्नित करें। अपनी तरह के komments के लिए धन्यवाद।
बिलगिन स्काई

लोगों को लगता है कि यह खोज इंजन से आ रहा है और मतदान शैली के आधार पर 2 पैरामीटर अधिक सामान्यतः लगता है, लेकिन यह आपकी मूल आवश्यकता क्या नहीं करता है
मार्टिन स्मिथ

जवाबों:


88

"एक varbinaryकरने के लिए परिवर्तितvarchar " अलग बातें हो सकता है।

Varbinary एसक्यूएल सर्वर में एक स्ट्रिंग की बाइनरी प्रतिनिधित्व है (उदाहरण के लिए कास्ट कर लौटे varbinaryप्रत्यक्ष या से DecryptByPassPhraseया DECOMPRESSकार्यों) तुम सिर्फ कर सकते हैं CASTयह

declare @b varbinary(max)
set @b = 0x5468697320697320612074657374

select cast(@b as varchar(max)) /*Returns "This is a test"*/

यह CONVERTशैली पैरामीटर के साथ उपयोग करने के बराबर है 0

CONVERT(varchar(max), @b, 0)

अन्य शैली के पैरामीटर CONVERTविभिन्न आवश्यकताओं के लिए उपलब्ध हैं जैसा कि अन्य उत्तरों में नोट किया गया है।


38
यह जवाब सही नहीं है। मैंने इसे उपयोगकर्ता के सिड्स के साथ टेबल पर परीक्षण किया - डिस्टि्रक्ट कास्ट वैल्यू की मात्रा कम है तो डिस्टिंच बाइनरी एसआईडी की मात्रा। अद्वितीय मूल्य प्राप्त करने के लिए आपको CONVERT (VARCHAR (...), बाइनरीवैल्यू, 2) का उपयोग करना चाहिए - गुंजन जुयाल का उत्तर सही है - इसे समाधान के रूप में चिह्नित किया जाना चाहिए
फिलिप मुनिन

13
@PhilippMunin - दो उत्तर अलग-अलग काम करते हैं। यह एक एक अभिव्यक्ति जैसे का परिणाम लेता है SELECT CAST('This is a test' AS VARBINARY(100))जो है 0x5468697320697320612074657374मेरा डिफ़ॉल्ट मिलान और धर्मान्तरित इसे करने के लिए वापस में varcharस्ट्रिंग। गुंजन का जवाब एक स्ट्रिंग के रूप में हेक्स प्रतिनिधित्व को वापस लौटाता है ('5468697320697320612074657374') संभवतः यह व्याख्या ओपी की आवश्यकता के लिए सही है क्योंकि उन्होंने इसे स्वीकार किया था।
मार्टिन स्मिथ

8
यह जवाब सही है! मैंने इसका परीक्षण किया और यह वही करता है जो मैंने और ओपी ने वांछित किया है।
रॉनी ओवरबी

1
@Beeveloper अगर आपने ऊपर दिए गए टिप्पणियों को पढ़ा था (विशेष रूप से मेरा एक) तो आपको यह महसूस करना चाहिए कि मुद्दा यह है कि "varbinary को varchar में बदलना" की व्याख्या अलग-अलग तरीकों से की जा सकती है। वास्तव में यही कारण है कि CONVERTआपके इच्छित तरीके का चयन करने के लिए एक शैली पैरामीटर है (मेरी व्याख्या डिफ़ॉल्ट शैली है) इसलिए यह उत्तर नहीं हो सकता है कि आपको इस समय अपने उपयोग के मामले की आवश्यकता है लेकिन यह अन्य उपयोग के मामलों के लिए सही है। जिसमें मूल प्रश्नकर्ता शामिल है जो "मानव पठनीय रूप" निर्दिष्ट करता है, हेक्स नहीं।
मार्टिन स्मिथ

1
SQL 2005 आप sys.fn_sqlvarbasetostr (@binary) का उपयोग कर सकते हैं क्योंकि CONVERT मेरे लिए रिक्त होगा
TheNerdyNerd

149

निम्नलिखित अभिव्यक्ति ने मेरे लिए काम किया:

SELECT CONVERT(VARCHAR(1000), varbinary_value, 2);

स्टाइल की पसंद (तीसरे पैरामीटर) पर यहां अधिक विवरण दिए गए हैं।


जैसा कि नीचे दिए गए @ लारा-मयूगबा द्वारा वर्णित किया गया है, शैली 1 में परिणाम पर 0x उपसर्ग शामिल है जो उपयोगी हो सकता है ..
स्टेन

@ लेर्नो वे क्यों करेंगे? यह वह नहीं करता है जिसकी उन्हें आवश्यकता थी।
मार्टिन स्मिथ

1
2008 से पहले sys.fn_sqlvarbasetostr (@binaryfield) का उपयोग करें
TheNerdyNerd

@metabuddy - किस तरह से यह गलत सूचना है? यह बताता है कि शब्द "एक भिन्न रूप में एक भिन्न रूप में परिवर्तित किया जा सकता है" और इसे शैली पैरामीटर द्वारा नियंत्रित किया जाता है। सिर्फ इसलिए कि उस उत्तर में शैली पैरामीटर वह नहीं है जो आपको अपने मामले के लिए चाहिए (लेकिन मूल प्रश्न का उत्तर देने वाला वही है) यह गलत सूचना नहीं देता है
मार्टिन स्मिथ

@TheNerdyNerd की टिप्पणी / उत्तर पर जोर देने के लिए, अभिव्यक्ति का चयन `sys.fn_sqlvarbasetostr (@b) / * रिटर्न 0x546869732069732020202074657374 * / एक परिवर्तन varchar (अधिकतम) का उपयोग करके पूर्व (8000) के कारण होगा ।
ज़ाचरी स्कॉट

63

वास्तव में सबसे अच्छा जवाब है

SELECT CONVERT(VARCHAR(1000), varbinary_value, 1);

के प्रारंभ में " 2" कट ऑफ " " का उपयोग 0xकरना varbinary


@BojieShuai क्या आपका मतलब है "मैं इतना सहमत हूं कि मेरे लिए आगे भी सहमत होना असंभव है", या "मैं सहमत था लेकिन मैं अब ऐसा नहीं करता"?
ह्वांगचेंग

@howcheng का मतलब है "अधिक सहमत नहीं हो सकता"। इस पर ध्यान दिलाने के लिए धन्यवाद।
बोजी शुआई

15

इसे इस्तेमाल करे

SELECT CONVERT(varchar(5000), yourvarbincolumn, 0)

6
मुझे शून्य के बजाय अपने तीसरे पैरामीटर के रूप में 2 का उपयोग करना पड़ा। मुझे वह उत्तर यहां मिला ।
WEFX

1
मेरे मामले में मुझे 5000 के बजाय MAX का उपयोग करना होगा
सुलेमान सुदिरमन

0

एक VARBINARY(MAX)कॉलम के लिए, मुझे उपयोग करना था NVARCHAR(MAX):

cast(Content as nvarchar(max))

या

CONVERT(NVARCHAR(MAX), Content, 0)
VARCHAR(MAX) didn't show the entire value

0

मैंने यह कोशिश की, इसने मेरे लिए काम किया:

declare @b2 VARBINARY(MAX) 
set @b2 = 0x54006800690073002000690073002000610020007400650073007400
SELECT CONVERT(nVARCHAR(1000), @b2, 0);

0

नीचे जाने के बाद मैं भी मूल पोस्ट [यहाँ] [१] संघर्ष कर रहा था

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" 
queryout "C:\Users\USER\Documents\ps_scripts\res.txt" -c -S myserver.db.com  -U admin -P password


  [1]: https://stackoverflow.com/questions/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.