ভার্চরকে এসকিউএল সার্ভারে স্বতন্ত্র পরিচয়ে রূপান্তর করুন


104

স্কিমাটির জন্য আমার কোনও নিয়ন্ত্রণ নেই, বর্ণাচর (50) হিসাবে সংজ্ঞায়িত একটি কলাম রয়েছে যা 'a89b1acd95016ae6b9c8aabb07da2010' (কোনও হাইফেন নেই) ফর্ম্যাটে অনন্য পরিচয়কারীদের সংরক্ষণ করে

। নেট গাইডে যাওয়ার জন্য আমি এগুলি এসকিউএল-এর অনন্য পরিচয়কারীগুলিতে রূপান্তর করতে চাই। তবে, নিম্নলিখিত কোয়েরি লাইনগুলি আমার পক্ষে কাজ করে না:

select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

এবং ফলাফল:

এমএসজি 8169, স্তর 16, রাজ্য 2, লাইন 1
চরিত্রের স্ট্রিং থেকে অনন্য পরিচয়দাতায় রূপান্তর করার সময় রূপান্তর ব্যর্থ হয়েছিল।

হাইফেনেটেড অনন্য পরিচয়দায়ক ব্যবহার করে একই প্রশ্নগুলি সূক্ষ্মভাবে কাজ করে তবে ডেটা সেই ফর্ম্যাটে সংরক্ষণ করা হয় না।

এসকিউএল-এ এই স্ট্রিংগুলিকে ইউনিকডেফায়ারগুলিতে রূপান্তর করার জন্য আরও একটি (দক্ষ) উপায় আছে? - আমি এটি নেট কোডে করতে চাই না।


কেবলমাত্র একটি সারি অক্ষর এবং সংখ্যার পক্ষে কোনও বৈধ জিইউইডি উপস্থাপনা নয় - কাসনসুই তার উত্তরে যেমন দেখিয়েছেন আপনাকে স্ট্রিং পার্সিং যাদুতে অবলম্বন করতে হবে।
marc_s

উত্তর:


126
DECLARE @uuid VARCHAR(50)
SET @uuid = 'a89b1acd95016ae6b9c8aabb07da2010'
SELECT  CAST(
        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
        AS UNIQUEIDENTIFIER)

10
আমি সত্যিই আশা করছিলাম এটির সমাধান হবে না তবে আমি অনুমান করি খুব শীঘ্রই আমরা এটি আবিষ্কার করব ...
গ্রেনেড

22
@ ইউ স্বতন্ত্রপরিচয়টি নির্বাচন করুন @ ইউ = কনভার্ট (অনন্য পরিচয়কারী, 'c029f8be-29dc-41c1-8b38-737b4cc5a4df') *** এটি যথেষ্ট হবে। সবেমাত্র চেষ্টা করে দেখেছি।
ফ্যাবিও মিলহিরো

হ্যাঁ! তাহলে আমাকে একমত হতে হবে। সুস্পষ্ট বিষয় হাইফেনগুলি সঠিক জায়গায় স্থাপন করা এবং আপনি যেতে প্রস্তুত! দুঃখিত!
ফ্যাবিও মিলহিরো

কোনও ফাংশনে এই স্নিপেটটি স্থাপন করা আপনার সরঞ্জামকিটটিতে একটি দুর্দান্ত সংযোজন, বিশেষত যেহেতু কিছু জেএসএন সিরিয়ালাইজর সিরিয়ালকরণের সময় জিইউইডিগুলি থেকে ড্যাশগুলি সরিয়ে দেয়, এটি ডিবাগ-এ এসকিউএল-এ পেস্ট অনুলিপি করা আরও শক্ত করে তোলে।
ডেভিড কম্পস

27

এটি একটি কার্যকর ফাংশন জন্য হবে। এছাড়াও, দ্রষ্টব্য আমি সাবস্ক্রিংয়ের পরিবর্তে STUFF ব্যবহার করছি।

create function str2uniq(@s varchar(50)) returns uniqueidentifier as begin
    -- just in case it came in with 0x prefix or dashes...
    set @s = replace(replace(@s,'0x',''),'-','')
    -- inject dashes in the right places
    set @s = stuff(stuff(stuff(stuff(@s,21,0,'-'),17,0,'-'),13,0,'-'),9,0,'-')
    return cast(@s as uniqueidentifier)
end

4
স্টাফ () এর দুর্দান্ত ব্যবহার। আপনার পদ্ধতিটি ব্যবহার করে আমাকে কেবল একবার সিলেক্ট স্টেটমেন্টে আমার ক্ষেত্রটি উল্লেখ করতে হবে। আমি স্কেলার-ফাংশনগুলি এড়িয়ে চলি, কারণ তারা সবসময় বেশ "স্কেল" ভাল করে না, তাই আমি এটি লিখি। ধন্যবাদ, এটি আমার কোড স্নিপিটসে চলছে!
মাইকটিভি

18

আপনার বারচার কর্নেল সি:

SELECT CONVERT(uniqueidentifier,LEFT(C, 8)
                                + '-' +RIGHT(LEFT(C, 12), 4)
                                + '-' +RIGHT(LEFT(C, 16), 4)
                                + '-' +RIGHT(LEFT(C, 20), 4)
                                + '-' +RIGHT(C, 12))


-4

যদি আপনার স্ট্রিংটিতে বিশেষ অক্ষর থাকে তবে আপনি এটি এমডি 5 এ হ্যাশ করতে পারেন এবং তারপরে এটিকে গাইড / অনন্য পরিচয়কারীতে রূপান্তর করতে পারেন।

SELECT CONVERT(UNIQUEIDENTIFIER, HASHBYTES('MD5','~öü߀a89b1acd95016ae6b9c8aabb07da2010'))

8
এটি ইনপুট স্ট্রিংটিকে সম্পূর্ণ ভিন্ন
জিইউইডি

-6

প্রদত্ত গাইডগুলি সঠিক ফর্ম্যাট নয় (। নেট সরবরাহিত নির্দেশিকা)।

begin try
select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010')
end try
begin catch
print '1'
end catch

6
হাইফেন ছাড়াই ভার্চারকে জিইউডিতে রূপান্তর করার প্রশ্নের উত্তর কীভাবে দেয়? এই সমস্ত কোডটি 1 টি
মুদ্রণযোগ্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.