এসকিউএল কেস সংবেদনশীল স্ট্রিং তুলনা করুন


234

আপনি স্ট্রিংকে কীভাবে তুলনা করবেন যাতে তুলনাটি সত্য হয় যদি প্রতিটি স্ট্রিংয়ের ক্ষেত্রে একই পরিমাণ থাকে। উদাহরণ স্বরূপ:

Select * from a_table where attribute = 'k'

... 'কে' এর একটি বৈশিষ্ট্য সহ একটি সারিতে ফিরে আসবে। আমি এই আচরণ চাই না।


আপনার যা প্রয়োজন তা এটি নাও হতে পারে তবে আপনি কোলেশন পরিবর্তন করতে পারেন বা আপনার ক্যোয়ারিতে একটি নির্দিষ্ট কোলেশন ব্যবহার করতে পারেন।
কেন

7
কোন এসকিউএল পণ্য?
onedaywhen

উত্তর:


388
Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

কৌতুকটি করেছেন।


4
আমি সাধারণত লাতিন
1_

3
হ্যাঁ, স্ট্যান্ডার্ড পদ্ধতির ক্ষেত্রে কেস-সংবেদনশীল কোলেশন ব্যবহার করা হয়, যদিও কোলিশগুলি তারা বিক্রেতার জন্য নির্দিষ্ট। আপনার এসকিউএল সার্ভার সিনট্যাক্স?
onedaywhen

আমার ক্ষেত্রে আমার ডিবিতে আমার 1 টি কলাম রয়েছে এটি কেস সংবেদনশীল। আমার এটি একটি স্ট্যান্ডার্ড (সিআই) কলামের সাথে তুলনা করা দরকার। আমি এই WHOE Foo.Bar = (Baz.Bar কল ল্যাটিন 1_ জেনারেল_সিএস_এএস) এর একটি প্রকরণ ব্যবহার করেছি
Hypnovirus

2
ধন্যবাদ তবে লাতিন 1_ জেনারাল_সিএস_এএস কি ?? এটি কি বিশেষ কীওয়ার্ড?
বিজয় সিং রানা

2
@ বিজয়সিংহরানা কোলেশনের Latin1_General_CS_ASএকটি স্পেসিফিকেশন। কোলেশন বলতে নিয়মের একটি সেট বোঝায় যা ডেটা সাজানো এবং তুলনা করা হয় তা নির্ধারণ করে। আরও তথ্যের জন্য এই পৃষ্ঠাটি দেখুন ।
এএমকমারম্যাক

51

আপনি এই সিনট্যাক্সটি ব্যবহার করে সেই বৈশিষ্ট্যটিকে কেস সংবেদনশীল হিসাবে রূপান্তর করতে পারেন :

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS

এখন আপনার অনুসন্ধান কেস সংবেদনশীল হবে

আপনি যদি সেই কলামের কেসটি আবার সংবেদনশীল করতে চান তবে ব্যবহার করুন

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS

29

আপনি কলামগুলি সহজেই ভারবিনারি (সর্বোচ্চ দৈর্ঘ্য) এ রূপান্তর করতে পারেন, ত্রুটিপূর্ণ তুলনা এড়াতে আপনি যে দৈর্ঘ্যটি প্রত্যাশা করেছেন তা অবশ্যই সর্বাধিক হওয়া উচিত, এটি কলামের দৈর্ঘ্য হিসাবে দৈর্ঘ্য নির্ধারণ করার জন্য যথেষ্ট। আপনার টেবিল কলামগুলিতে স্থানটির অর্থ এবং মূল্য রয়েছে ব্যতীত ট্রিম কলাম আপনাকে আসল মানের তুলনা করতে সহায়তা করে, এটি একটি সাধারণ নমুনা এবং আপনি দেখতে পাচ্ছেন যে আমি কলামগুলির মানটি ট্রিম করে তারপরে রূপান্তর এবং তুলনা করতে পারেন:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))

এই সাহায্য আশা করি।


2
ঠিক আমি খুঁজছেন ছিল কি. আপার-কেস অক্ষর থাকা এন্ট্রিগুলি সন্ধানের জন্য এক-সময়, কেস সংবেদনশীল তুলনা করার একটি সহজ উপায়।
মাইক D.

20

ঠিক অন্য বিকল্প হিসাবে আপনি HASHBYTES ব্যবহার করতে পারেন, এরকম কিছু:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')

1
সংঘর্ষের কী হবে? এটি বিরল হতে পারে তবে আমি ধরে নিই যে একই মানটিতে হ্যাশ রয়েছে এমন একাধিক স্ট্রিং থাকবে।
ডেভিড ক্লেম্পফনার

হ্যাঁ সম্ভব, তবে এমন একটি সাধারণ স্ট্রিংয়ের উদাহরণে আমি বিরল।
ডেভ Sexton

@ ডেভিডক্লেম্পফনার কেন প্রথমে তুলনা করবেন না এবং যদি সেগুলি মিলছে তবে হ্যাশবাইটগুলিও পরীক্ষা করে দেখুন? আমরা এটিকে একটি ফাংশন করতে পারি এবং এটিকে স্ট্রিংসএরেসিজেস সেনসিটিভ এক্যুয়াল (ক, খ) => এ = বি এবং হ্যাশবাইটস ('শ 1', ক) = হ্যাশবাইটস ('শ 1', বি)
ডেমেট্রিস লেপটোস

3

আপনি attributeহিসাবে হিসাবে সংজ্ঞা BINARYবা ব্যবহার INSTRবা STRCMPআপনার অনুসন্ধান সম্পাদন করতে পারেন।


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