এসকিউএল সার্ভারে স্ট্রিংয়ের বিভিন্ন ধরণের


96

কিভাবে থেকে একটি কলাম মান রূপান্তর করতে varbinary(max)করতে varcharপাঠযোগ্য আকারে?


4
স্ট্রিংয়ের মান থেকে মূল্য বিচ্ছিন্ন হয়ে যাওয়ার পরে আমি বার্চার চাই ..
বিলগিন কলি

@ মার্টিনস্মিথ পিপিএল আমাকে পরিবর্তন করতে চাপ দিন। সুতরাং আপনার উত্তর আবার চিহ্নিত। আপনার ভাল লাগার জন্য ধন্যবাদ।
বিলগিন কলি

লোকেরা সার্চ ইঞ্জিনগুলি থেকে এটি দেখতে পাবে এবং ভোটের উপর ভিত্তি করে স্টাইল 2 প্যারামিটারটি আরও সাধারণভাবে প্রয়োজনীয় বলে মনে হচ্ছে তবে এটি আপনার আসল প্রয়োজনটি যা করে তা করে না
মার্টিন স্মিথ

উত্তর:


92

"এটিকে রূপান্তরিত varbinaryকরা varchar" অর্থ বিভিন্ন জিনিস বোঝাতে পারে।

যদি ভেরিবিনারিটি হয় এসকিউএল সার্ভারের স্ট্রিংয়ের বাইনারি উপস্থাপনা (উদাহরণস্বরূপ varbinaryসরাসরি DecryptByPassPhraseবা DECOMPRESSfunctionsক্য বা ফাংশন থেকে from ালাই দ্বারা ফিরে ) আপনি কেবল 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
এই উত্তরটি সঠিক নয়। আমি এটি ব্যবহারকারীর এসআইডি সহ টেবিলে পরীক্ষা করেছি - ডিস্টিন্ট কাস্ট করা মানগুলির পরিমাণ কম তবে ডিস্টিন্ট বাইনারি এসআইডি পরিমাণ। অনন্য মূল্য পেতে আপনার কনভার্ট (ভ্রচার (...), বাইনারিভ্যালু, ২) ব্যবহার করা উচিত - গুঞ্জন জুয়াল এর উত্তর সঠিক - এটি সমাধান হিসাবে চিহ্নিত করা উচিত
ফিলিপ মুনিন

13
@ ফিলিপমুনিন - দুটি উত্তর বিভিন্ন কাজ করে। এটি একটি মত প্রকাশের ফলাফল গ্রহণ করে SELECT CAST('This is a test' AS VARBINARY(100))যা 0x5468697320697320612074657374আমার ডিফল্ট কোলিশনে রয়েছে এবং এটিকে আবার varcharস্ট্রিংয়ে রূপান্তরিত করে । গুঞ্জনের উত্তর হেক্সের উপস্থাপনাটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয় ('5468697320697320612074657374') সম্ভবত এই ব্যাখ্যাটি ওপি-র প্রয়োজনীয়তার জন্য সঠিক কারণ তারা এটি গ্রহণ করেছিল।
মার্টিন স্মিথ

8
এই উত্তরটি সঠিক! আমি এটি পরীক্ষা করেছি এবং এটি আমার ও ওপি যা চেয়েছিল তা করে।
রনি ওভারবি

4
@ বিডিভোপার আপনি যদি উপরের মন্তব্যগুলি পড়ে থাকেন (বিশেষত আমার একটি) আপনার বুঝতে হবে যে সমস্যাটি হ'ল "ভার্চিনিয়াকে ভার্চারে রূপান্তরিত করা" বিভিন্ন উপায়ে ব্যাখ্যা করা যেতে পারে। প্রকৃতপক্ষে এই কারণেই আপনার পছন্দ CONVERTমতো উপায়টি বেছে নেওয়ার জন্য একটি শৈলীর প্যারামিটার রয়েছে (আমার ব্যাখ্যাটি ডিফল্ট শৈলী) সুতরাং এই উত্তরটি আপনার ব্যবহারের ক্ষেত্রে এই মুহুর্তে আপনার প্রয়োজন মতো নাও হতে পারে তবে অন্যান্য ব্যবহারের ক্ষেত্রে এটি সঠিক। মূল প্রশ্নকর্তা সহ যারা হেক্স নয় "মানব পাঠযোগ্য ফর্ম" নির্দিষ্ট করেছেন।
মার্টিন স্মিথ

4
এসকিউএল 2005 আপনি sys.fn_sqlvarbasetostr (@ বাইনারি) ব্যবহার করতে পারেন কারণ কনভার্টটি আমার জন্য ফাঁকা থাকবে
TheNerdyNerd

152

নিম্নলিখিত প্রকাশটি আমার পক্ষে কাজ করেছে:

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

শৈলীর পছন্দ (তৃতীয় প্যারামিটার) সম্পর্কে আরও বিশদ এখানে রয়েছে।


4
নীচে @ লারা-মায়ুগবা দ্বারা বর্ণিত হিসাবে শৈলী 1 এর ফলাফলের 0x উপসর্গ অন্তর্ভুক্ত রয়েছে যা দরকারী হতে পারে ..
স্ট্যান

@ এসেরনো তারা কেন করবে? এটি তাদের প্রয়োজন মতো করে না।
মার্টিন স্মিথ

4
২০০৮ এর পূর্বে sys.fn_sqlvarbasetostr (@ বেইনফিল্ড)
TheNerdyNerd

@ মেটাবুড্ডি - এটি কীভাবে ভুল তথ্য দেওয়া হচ্ছে? এটিতে বলা হয়েছে যে "একটি বর্ণকে একটি ভার্চারিতে রূপান্তর করা" শব্দটি বিভিন্ন উপায়ে করা যেতে পারে এবং এটি স্টাইল প্যারামিটার দ্বারা নিয়ন্ত্রিত হয়। কেবলমাত্র এই উত্তরের শৈলীর প্যারামিটারটি আপনার মামলার জন্য প্রয়োজনীয় নয় (তবে এটিই মূল প্রশ্নের উত্তর দেয়) এটি ভুল তথ্য দেয় না
মার্টিন স্মিথ

4
@TheNerdyNerd এর মন্তব্য / উত্তরের উপর জোর দেওয়ার জন্য এই অভিব্যক্তিটি হ'ল সিলেক্ট করুন sf.fn_sqlvarbasetostr (@ বি) / * প্রত্যাবর্তন 0x5468697320697320612074657374 * / এক পরিবর্তন ভার্চর (সর্বাধিক) বারচর (8000) হিসাবে ধরে নিয়েছে কারণ 2008-এর আগে এটি ব্যবহার করে না ।
জাচারি স্কট

66

আসলে সবচেয়ে ভাল উত্তর

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

এর শুরুতে " 2" কেটে "ব্যবহার 0xকরে varbinary


@ বুজিশুয়াই আপনার অর্থ কি "আমি এতটাই সম্মত হয়েছি যে আমার পক্ষে আরও সম্মত হওয়াও অসম্ভব", বা "আমি সম্মত হয়েছি তবে আমি আর তা করি না"?
হাওচেং

@ হাওচেং মানে আমি "আরও কিছুতেই রাজি হতে পারি না"। এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ.
বোজি শুই

15

এটা চেষ্টা কর

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

6
আমাকে শূন্যের পরিবর্তে আমার তৃতীয় প্যারামিটার হিসাবে 2 ব্যবহার করতে হয়েছিল। আমি এখানে উত্তর পেয়েছি ।
WEFX

4
আমার ক্ষেত্রে আমাকে 5000 এর পরিবর্তে ম্যাক্স ব্যবহার করতে হবে
সুলাইমান সুদর্শন

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

আমি খুব মূল পোস্টে লড়াই করছিলাম বলে নীচে একবার দেখুন [এখানে] [1]

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]: /programming/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.