এসকিউএল ব্যবহার করার সময়, এর পরিবর্তে =
কোনও WHERE
ধারাটিতে ব্যবহারের কোনও সুবিধা আছে LIKE
কি?
কোনও বিশেষ অপারেটর ছাড়া, LIKE
এবং =
একই, ঠিক আছে?
5
জন্য কমপক্ষে ভোট রয়েছে । আমি বিনীত অনুরোধ আপনার প্রস্তাবিত গেল SQL- মতো হিসেবে সমার্থক ?
এসকিউএল ব্যবহার করার সময়, এর পরিবর্তে =
কোনও WHERE
ধারাটিতে ব্যবহারের কোনও সুবিধা আছে LIKE
কি?
কোনও বিশেষ অপারেটর ছাড়া, LIKE
এবং =
একই, ঠিক আছে?
5
জন্য কমপক্ষে ভোট রয়েছে । আমি বিনীত অনুরোধ আপনার প্রস্তাবিত গেল SQL- মতো হিসেবে সমার্থক ?
উত্তর:
LIKE
এবং =
বিভিন্ন অপারেটর হয়। এখানে বেশিরভাগ উত্তরগুলি ওয়াইল্ডকার্ড সমর্থনকে কেন্দ্র করে, যা এই অপারেটরগুলির মধ্যে একমাত্র পার্থক্য নয়!
=
একটি তুলনা অপারেটর যা সংখ্যা এবং স্ট্রিংয়ে পরিচালনা করে। স্ট্রিংগুলির সাথে তুলনা করার সময়, তুলনা অপারেটর পুরো স্ট্রিংগুলির সাথে তুলনা করে ।
LIKE
একটি স্ট্রিং অপারেটর যা চরিত্রের সাথে চরিত্রের তুলনা করে ।
বিষয়গুলিকে জটিল করার জন্য, উভয় অপারেটর একটি কোলেশন ব্যবহার করেন যা তুলনার ফলাফলের উপর গুরুত্বপূর্ণ প্রভাব ফেলতে পারে।
আসুন প্রথমে একটি উদাহরণ চিহ্নিত করুন যেখানে এই অপারেটরগুলি স্পষ্টতই পৃথক ফলাফল উত্পাদন করে। আমাকে মাইএসকিউএল ম্যানুয়াল থেকে উদ্ধৃতি দেওয়ার অনুমতি দিন:
এসকিউএল স্ট্যান্ডার্ড অনুযায়ী, লাইক প্রতি-চরিত্রের ভিত্তিতে ম্যাচ সম্পাদন করে, সুতরাং এটি = তুলনা অপারেটরের থেকে পৃথক ফলাফল আনতে পারে:
mysql> SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+
| 'ä' LIKE 'ae' COLLATE latin1_german2_ci |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
mysql> SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+
| 'ä' = 'ae' COLLATE latin1_german2_ci |
+--------------------------------------+
| 1 |
+--------------------------------------+
দয়া করে নোট করুন যে মাইএসকিউএল ম্যানুয়ালটির এই পৃষ্ঠাটিকে স্ট্রিং তুলনা ফাংশন বলা হয় , এবং =
এটি আলোচনা করা হয়নি, যা বোঝায় যে =
এটি স্ট্রিং তুলনা ফাংশন নয়।
=
কাজ করে?এসকিউএল স্ট্যান্ডার্ড § 8.2 বর্ণনা কিভাবে =
স্ট্রিং তুলনা:
দুটি চরিত্রের স্ট্রিংয়ের তুলনা নীচে নির্ধারিত হয়:
ক) যদি X এর অক্ষরের দৈর্ঘ্য Y এর বর্ণের দৈর্ঘ্যের সমান না হয়, তবে তুলনার উদ্দেশ্যে, ছোট স্ট্রিং কার্যকরভাবে প্রতিস্থাপন করা হবে, নিজের একটি অনুলিপি যা দীর্ঘ স্ট্রিংয়ের দৈর্ঘ্যে প্রসারিত করা হয়েছে এক বা একাধিক প্যাড অক্ষরের ডানদিকে একযোগে, যেখানে প্যাড অক্ষর সিএস এর উপর ভিত্তি করে বেছে নেওয়া হয়েছে। যদি সিএসের কোনও পিএডি বৈশিষ্ট্য থাকে, তবে প্যাড অক্ষরটি এক্স এবং ওয়াইয়ের চরিত্রের যে কোনও অক্ষরের চেয়ে সিএস এর অধীনে কম স্ট্রাইটের চেয়ে কম অংশীদারীকরণ-নির্ভর চরিত্র। অন্যথায়, প্যাডের চরিত্রটি একটি।
খ) এক্স এবং ওয়াইয়ের তুলনার ফলাফলটি কোলাটিং সিকোয়েন্স সিএস দ্বারা দেওয়া হয়েছে।
গ) কোলটিং ক্রমের উপর নির্ভর করে দুটি স্ট্রিং সমান হিসাবে তুলনা করতে পারে যদিও সেগুলি বিভিন্ন দৈর্ঘ্যের হয় বা বিভিন্ন বর্ণের ক্রম থাকে। যখন অপারেশনস MAX, MIN, DISTINCT, একটি গ্রুপিং কলামের উল্লেখ, এবং ইউনিয়ন, EXCEPT, এবং ইন্টারস্যাক্ট অপারেটরগুলি চরিত্রের স্ট্রিংগুলিকে উল্লেখ করে, তখন এই সমান মানগুলির একটি সেট থেকে এই ক্রিয়াকলাপগুলির দ্বারা নির্বাচিত নির্দিষ্ট মান প্রয়োগ-নির্ভর।
(সামনে জোর দাও.)
এটার মানে কি? এর অর্থ হ'ল স্ট্রিংগুলির তুলনা করার সময় =
অপারেটরটি বর্তমান কোলেশনটির চারপাশে কেবল একটি পাতলা মোড়ক। একটি কলেজ একটি লাইব্রেরি যা স্ট্রিং তুলনা বিভিন্ন নিয়ম আছে। এখানে মাইএসকিউএল থেকে বাইনারি সংযোগের উদাহরণ রয়েছে :
static int my_strnncoll_binary(const CHARSET_INFO *cs __attribute__((unused)),
const uchar *s, size_t slen,
const uchar *t, size_t tlen,
my_bool t_is_prefix)
{
size_t len= MY_MIN(slen,tlen);
int cmp= memcmp(s,t,len);
return cmp ? cmp : (int)((t_is_prefix ? len : slen) - tlen);
}
এই নির্দিষ্ট জোটটি বাই-বাই-বাইটের তুলনা করতে ঘটে (যার কারণে এটি "বাইনারি" বলা হয় - এটি স্ট্রিংগুলিতে কোনও বিশেষ অর্থ দেয় না)। অন্যান্য সংস্থানগুলি আরও উন্নত তুলনা প্রদান করতে পারে।
উদাহরণস্বরূপ, এখানে একটি ইউটিএফ -8 কোলেশন রয়েছে যা কেস-সংবেদনশীল তুলনা সমর্থন করে। কোডটি এখানে পেস্ট করার জন্য খুব দীর্ঘ, তবে সেই লিঙ্কটিতে যান এবং এর বডিটি পড়ুন my_strnncollsp_utf8mb4()
। এই জোটটি একসাথে একাধিক বাইট প্রক্রিয়া করতে পারে এবং এটি বিভিন্ন রূপান্তরগুলি প্রয়োগ করতে পারে (যেমন কেস সংবেদনশীল তুলনা)। =
অপারেটর সম্পূর্ণরূপে কোলেশন এর অনেকাংশে থেকে আনমনা হয়।
LIKE
কাজ করে?এসকিউএল স্ট্যান্ডার্ড § 8.5 বর্ণনা কিভাবে LIKE
স্ট্রিং তুলনা:
<প্রেডিকেট>
M LIKE P
সত্য আছে যদি সাব-স্ট্রিংগুলিতে এম এর বিভাজন থাকে যেমন:
i) এম এর একটি স্ট্রিংিং এম এর 0 বা তার বেশি সংলগ্ন <চরিত্রের প্রতিনিধিত্ব> এর ক্রম এবং এম এর প্রতিটি <অক্ষর প্রতিনিধিত্ব> হ'ল একটি স্ট্রিংয়ের অংশ।
ii) পি এর আই-তম স্ট্রিংয়ের স্পেসিফায়ার যদি একটি স্বেচ্ছাচারিতা চরিত্রের নির্দিষ্টকরণকারী হয় তবে এম এর আই-তম স্ট্রিংটি কোনও একক <অক্ষরের প্রতিনিধিত্ব>।
iii) যদি পি এর আই-তম স্ট্রিং স্পেসিফায়ারটি একটি স্বেচ্ছাসেবী স্ট্রিং স্পেসিফায়ার হয় তবে এম এর আই-তম স্ট্রিংটি 0 বা ততোধিক <চরিত্রের প্রতিনিধিত্ব> এর কোনও ক্রম।
iv) যদি পি এর আই-তম স্ট্রিংং স্পেসিফারটি না হয় একটি স্বেচ্ছাকৃতির চরিত্র নির্দিষ্টকারক বা সালিশী স্ট্রিং নির্দিষ্টকরণকারক না হয়, তবে এম এর আই-তম স্ট্রিংিং <প্রেডিকেট এর মতো> এর কোলাটিং ক্রম অনুসারে সেই স্ট্রিংং স্পেসিফায়ারের সমান, এমকে <স্পেস> অক্ষর যুক্ত করার সাথে এর স্ট্রিংং স্পেসিফায়ারের সমান দৈর্ঘ্য রয়েছে।
v) এম এর সাবস্ট্রিংয়ের সংখ্যা পি এর সাবস্ট্রিং স্পেসিফায়ার সংখ্যার সমান is
(সামনে জোর দাও.)
এটি বেশ কথামূলক, সুতরাং আসুন এটি ভেঙে দিন। চলছে ii ও iii ওয়াইল্ডকার্ড পড়ুন _
এবং %
যথাক্রমে। যদি P
কোনও ওয়াইল্ডকার্ড না থাকে তবে কেবল iv আইটেম প্রয়োগ হয়। এটি ওপি কর্তৃক উত্সাহিত আগ্রহের ঘটনা।
এই ক্ষেত্রে এটি বর্তমান কোলেশন ব্যবহার করে M
প্রতিটি স্ট্রস্ট্রিংয়ের বিপরীতে প্রতিটি "স্ট্রিং" (স্বতন্ত্র অক্ষর) তুলনা করে P
।
নীচের লাইনটি হল স্ট্রিংগুলির =
সাথে তুলনা করার সময় পুরো স্ট্রিংটির সাথে তুলনা করা হয় এবং একই LIKE
সাথে একটি অক্ষরের সাথে তুলনা করা হয়। উভয় তুলনা বর্তমান কোলেশন ব্যবহার করে। এই পোস্টে প্রথম উদাহরণে প্রমাণ হিসাবে এই পার্থক্যটি কিছু ক্ষেত্রে বিভিন্ন ফলাফলের দিকে নিয়ে যায়।
কোনটি আপনার ব্যবহার করা উচিত? কেউ আপনাকে এটি বলতে পারে না - আপনার ব্যবহারের ক্ষেত্রে সঠিক যেটি ব্যবহার করা উচিত use তুলনা অপারেটরগুলি স্যুইচ করে অকালপূর্বক অনুকূলিত হন না।
LIKE
হয় তবে এই উত্তরটি দুর্দান্তভাবে ব্যাখ্যা করে যে ব্যবহার করা বা বর্তমান LIKE
ছাড়া ব্যবহার করা মোটেও ব্যবহারের মতো নয় । আপনার উত্তরটি হাজার উপার্জন পেতে পারে। %
_
=
'AbCdEfG'
এবং আমি তা WHERE MyCol = 'abcdefg'
করি তবে আমি এখনও সেই সারিটি ফিরিয়ে আনতে পারি, যদিও তারা স্পষ্টভাবে বাই-বাই-বাইট সমতুল্য নয়
set charset latin1;
SELECT 'ä' = 'ae' COLLATE latin1_german2_ci;
0 SELECT 'ä' LIKE 'ae' COLLATE latin1_german2_ci;
দেয় এবং 0 দেয়।
সমান (=) অপারেটর একটি "তুলনা অপারেটর সমতার জন্য দুটি মানের তুলনা করে।" অন্য কথায়, একটি এসকিউএল বিবৃতিতে, সমীকরণের উভয় দিক সমান না হলে এটি সত্য হবে না। উদাহরণ স্বরূপ:
SELECT * FROM Store WHERE Quantity = 200;
LIKE অপারেটর "" একটি প্যাটার্ন ম্যাচ তুলনা প্রয়োগ করে "যা" ওয়াইল্ড-কার্ড অক্ষরযুক্ত প্যাটার্নের স্ট্রিংয়ের সাথে একটি স্ট্রিং মান "মেলাতে চেষ্টা করে। উদাহরণ স্বরূপ:
SELECT * FROM Employees WHERE Name LIKE 'Chris%';
লাইক সাধারণত স্ট্রিং এবং সমান (সাধারণত আমি বিশ্বাস করি) দিয়ে দ্রুত ব্যবহৃত হয়। সমতুল্য অপারেটর ওয়াইল্ড কার্ডের অক্ষরগুলিকে আক্ষরিক অক্ষর হিসাবে বিবেচনা করে। প্রত্যাবর্তিত ফলাফলের পার্থক্য নিম্নরূপ:
SELECT * FROM Employees WHERE Name = 'Chris';
এবং
SELECT * FROM Employees WHERE Name LIKE 'Chris';
একই ফলাফলটি ফিরিয়ে আনবে, যদিও লাইক ব্যবহার করা সাধারণত এটি প্যাটার্ন ম্যাচ হিসাবে আরও বেশি সময় নেয়। যাহোক,
SELECT * FROM Employees WHERE Name = 'Chris%';
এবং
SELECT * FROM Employees WHERE Name LIKE 'Chris%';
বিভিন্ন ফলাফল ফিরে আসবে, যেখানে "=" ব্যবহারের ফলে কেবল "ক্রিস%" প্রত্যাবর্তনের ফলাফল আসে এবং LIKE অপারেটর "ক্রিস" দিয়ে শুরু করে যে কোনও কিছু ফিরিয়ে আনবে।
এটি এসকিউএল'র মতো 'বনাম' = 'পারফরম্যান্সের জন্য আমার অন্য উত্তরের একটি অনুলিপি / পেস্ট :
মাইএসকিএল 5.5 ব্যবহার করে একটি ব্যক্তিগত উদাহরণ: আমার 2 টি টেবিলের মধ্যে একটি অভ্যন্তরীণ যোগসূত্র ছিল, 3 মিলিয়ন সারিগুলির মধ্যে একটি এবং 10 হাজার সারিগুলির মধ্যে একটি।
নীচে হিসাবে কোনও সূচকগুলিতে কোনও পছন্দ ব্যবহার করার সময় (কোনও ওয়াইল্ডকার্ড নেই), এটি প্রায় 30 সেকেন্ড সময় নিয়েছিল:
where login like '12345678'
আমি বুঝি 'ব্যাখ্যা' ব্যবহার করে:
একই ক্যোয়ারিতে একটি '=' ব্যবহার করার সময় এটি প্রায় 0.1 সেকেন্ড সময় নিয়েছিল:
where login ='12345678'
আমি বুঝি 'ব্যাখ্যা' ব্যবহার করে:
আপনি দেখতে পাচ্ছেন, like
সূচকটি সম্পূর্ণরূপে বাতিল হয়ে গেছে, সুতরাং ক্যোয়ারীতে আরও 300 বার বেশি সময় লেগেছে।
LIKE
এবং =
বিভিন্ন। LIKE
আপনি অনুসন্ধান অনুসন্ধানে যা ব্যবহার করবেন তা হ'ল। এটি _
(সাধারণ চরিত্রের ওয়াইল্ডকার্ড) এবং %
(বহু-চরিত্রের ওয়াইল্ডকার্ড) এর মতো ওয়াইল্ডকার্ডগুলিকেও অনুমতি দেয় ।
=
আপনি যদি সঠিক ম্যাচগুলি চান তা ব্যবহার করা উচিত এবং এটি আরও দ্রুত হবে।
ডাটাবেস সিস্টেমের উপর নির্ভর করে।
সাধারণত কোনও বিশেষ অক্ষর না থাকলে হ্যাঁ, = এবং লাইক একই হয় are
কিছু ডাটাবেস সিস্টেম, বিভিন্ন অপারেটরগুলির সাথে কোলেশন সেটিংসকে আলাদাভাবে আচরণ করতে পারে।
উদাহরণস্বরূপ, মাইএসকিউএল এর সাথে = অন স্ট্রিংয়ের তুলনাগুলি সর্বদা ডিফল্টরূপে কেস-সংবেদনশীল থাকে তাই বিশেষ অক্ষর ছাড়া LIKE একই হয়। অন্য কিছু আরডিবিএমএসের মতো লাইক কেস-সংবেদনশীল হয় যখন = হয় না।
এই উদাহরণের জন্য আমরা এটি গ্রহণযোগ্যভাবে বিবেচনা করি যে ভার্চারকোলটিতে ''
এই কলামটির বিপরীতে কোনও খালি ঘর নেই
select * from some_table where varcharCol = ''
select * from some_table where varcharCol like ''
প্রথমটি 0 টি সারি আউটপুটে ফলাফল যখন দ্বিতীয়টি পুরো তালিকাটি দেখায়। ফিল্টারের মতো কাজ করার সময় = কঠোরভাবে ম্যাচের ক্ষেত্রে। যদি ফিল্টারটির কোনও মানদণ্ড না থাকে তবে প্রতিটি ডেটা বৈধ।
যেমন - এর উদ্দেশ্য অনুসারে এটি কিছুটা ধীর গতিতে কাজ করে এবং বর্ণচক্র এবং অনুরূপ ডেটা ব্যবহারের জন্য তৈরি।
আপনি যদি কোনও সঠিক মিলের জন্য অনুসন্ধান করেন তবে আপনি = এবং LIKE উভয়ই ব্যবহার করতে পারেন।
এই ক্ষেত্রে "=" ব্যবহার করা খুব সামান্য দ্রুত (সঠিক মিলের সন্ধান করা) - আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে দু'বার একই ক্যোয়ারী রেখে, একবার "=" ব্যবহার করে একবার "লাইক" ব্যবহার করে পরীক্ষা করে দেখতে পারেন এবং তারপরে "ক্যোয়ারী" / "প্রকৃত বাস্তবায়ন পরিকল্পনা অন্তর্ভুক্ত করুন" ব্যবহার করে।
দুটি প্রশ্নের এক্সিকিউট করুন এবং আপনার ফলাফল দুটিবার দেখতে হবে এবং দুটি বাস্তব বাস্তবায়ন পরিকল্পনা রয়েছে। আমার ক্ষেত্রে, এগুলি 50% বনাম 50% বিভক্ত হয়েছিল, তবে "=" এক্সিকিউশন পরিকল্পনার একটি ছোট "আনুমানিক সাবট্রি ব্যয়" রয়েছে (যখন আপনি বাম-সর্বাধিক "নির্বাচন" বাক্সের উপরে ঘুরে দেখেন) - তবে আবার এটি সত্যই একটি বিশাল পার্থক্য না।
আপনি যখন নিজের পছন্দ মত অভিব্যক্তিগুলিতে ওয়াইল্ডকার্ডগুলি দিয়ে অনুসন্ধান শুরু করবেন তখন অনুসন্ধানের কর্মক্ষমতা হ্রাস পাবে। "লাইক মিল%" অনুসন্ধানটি এখনও বেশ দ্রুত হতে পারে - এসকিউএল সার্ভার সেই কলামে একটি সূচক ব্যবহার করতে পারে, যদি সেখানে থাকে। "LIKE% এক্সপ্রেশন%" অনুসন্ধান করা মারাত্মকভাবে ধীর, যেহেতু এসকিউএল সার্ভার এই অনুসন্ধানটি সন্তুষ্ট করতে পারে কেবল একটি সম্পূর্ণ টেবিল স্ক্যান করে। তাই আপনার লাইক দিয়ে সাবধান!
আঙ্গুরের ছিরড়া
আপনি রান সময়ে ক্যোয়ারি তৈরি করার সময় স্ট্রিংয়ের সাথে ওয়াইল্ডকার্ডস এবং বিশেষ অক্ষরের দ্বন্দ্বগুলি এড়ানো = ব্যবহার করা এড়ানো যায়।
এটি LIKE ধারাটিতে পিছলে যেতে পারে এমন সমস্ত বিশেষ ওয়াইল্ডকার্ড চরিত্রগুলি এড়িয়ে না যাওয়ার এবং উদ্দেশ্যযুক্ত ফলাফল না তৈরি করে প্রোগ্রামারের জীবনকে আরও সহজ করে তোলে। সর্বোপরি, = হ'ল 99% ব্যবহারের ক্ষেত্রে, এটি প্রতিবার এড়াতে পারা ব্যথা হবে।
'90 এর দশকে চোখ বুলায়
আমি এটিকে কিছুটা ধীর করেও সন্দেহ করি, তবে বিন্যাসে কোনও ওয়াইল্ডকার্ড না থাকলে আমার তা সন্দেহজনক।
কর্মক্ষমতা সম্পর্কিত মূল প্রশ্নটির সমাধান করতে, এটি সূচকের ব্যবহারের দিকে নেমে আসে । যখন একটি সাধারণ টেবিল স্ক্যান ঘটে তখন "LIKE" এবং "=" অভিন্ন । সূচকগুলি জড়িত থাকাকালীন এটি LIKE ধারাটি কীভাবে তৈরি হয় তার উপর নির্ভর করে। আরও নির্দিষ্টভাবে বলা যায়, ওয়াইল্ডকার্ডের অবস্থান কী?
নিম্নোক্ত বিবেচনা কর:
CREATE TABLE test(
txt_col varchar(10) NOT NULL
)
go
insert test (txt_col)
select CONVERT(varchar(10), row_number() over (order by (select 1))) r
from master..spt_values a, master..spt_values b
go
CREATE INDEX IX_test_data
ON test (txt_col);
go
--Turn on Show Execution Plan
set statistics io on
--A LIKE Clause with a wildcard at the beginning
DBCC DROPCLEANBUFFERS
SELECT txt_Col from test where txt_col like '%10000'
--Results in
--Table 'test'. Scan count 3, logical reads 15404, physical reads 2, read-ahead reads 15416, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
--Index SCAN is 85% of Query Cost
--A LIKE Clause with a wildcard in the middle
DBCC DROPCLEANBUFFERS
SELECT txt_Col from test where txt_col like '1%99'
--Results in
--Table 'test'. Scan count 1, logical reads 3023, physical reads 3, read-ahead reads 3018, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
--Index Seek is 100% of Query Cost for test data, but it may result in a Table Scan depending on table size/structure
--A LIKE Clause with no wildcards
DBCC DROPCLEANBUFFERS
SELECT txt_Col from test where txt_col like '10000'
--Results in
--Table 'test'. Scan count 1, logical reads 3, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
--Index Seek is 100% of Query Cost
GO
--an "=" clause = does Index Seek same as above
DBCC DROPCLEANBUFFERS
SELECT txt_Col from test where txt_col = '10000'
--Results in
--Table 'test'. Scan count 1, logical reads 3, physical reads 2, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
--Index Seek is 100% of Query Cost
GO
DROP TABLE test
"=" বনাম "লাইক" ব্যবহার করার সময় ক্যোয়ারি প্ল্যান তৈরির ক্ষেত্রেও নগণ্য পার্থক্য থাকতে পারে।
ওয়াইল্ডকার্ড এছাড়া মধ্যে পার্থক্য =
এবং LIKE
উভয় SQL সার্ভার ধরনের এবং কলাম ধরনের উপর উপর নির্ভর করবে।
এই উদাহরণটি ধরুন:
CREATE TABLE testtable (
varchar_name VARCHAR(10),
char_name CHAR(10),
val INTEGER
);
INSERT INTO testtable(varchar_name, char_name, val)
VALUES ('A', 'A', 10), ('B', 'B', 20);
SELECT 'VarChar Eq Without Space', val FROM testtable WHERE varchar_name='A'
UNION ALL
SELECT 'VarChar Eq With Space', val FROM testtable WHERE varchar_name='A '
UNION ALL
SELECT 'VarChar Like Without Space', val FROM testtable WHERE varchar_name LIKE 'A'
UNION ALL
SELECT 'VarChar Like Space', val FROM testtable WHERE varchar_name LIKE 'A '
UNION ALL
SELECT 'Char Eq Without Space', val FROM testtable WHERE char_name='A'
UNION ALL
SELECT 'Char Eq With Space', val FROM testtable WHERE char_name='A '
UNION ALL
SELECT 'Char Like Without Space', val FROM testtable WHERE char_name LIKE 'A'
UNION ALL
SELECT 'Char Like With Space', val FROM testtable WHERE char_name LIKE 'A '
এমএস এসকিউএল সার্ভার ২০১২ ব্যবহার করে , LIKE
কলামের ধরণটি বাদে পিছনের স্থানগুলি তুলনা করে উপেক্ষা করা হবে VARCHAR
।
ব্যবহার মাইএসকিউএল 5.5 , পিছনের শূন্যস্থানগুলি জন্য উপেক্ষা করা হবে =
, কিন্তু না LIKE
, সঙ্গে উভয় CHAR
এবং VARCHAR
।
PostgreSQL 9.1 ব্যবহার করে , স্পেসগুলি উভয়ই =
এবং LIKE
ব্যবহারের সাথে উল্লেখযোগ্য VARCHAR
, তবে CHAR
( ডকুমেন্টেশন দেখুন ) দিয়ে নয়।
সাথে আচরণও LIKE
আলাদা হয় CHAR
।
উপরের মত একই ডেটা ব্যবহার CAST
করে, কলামের নামটিতে একটি স্পষ্ট ব্যবহার করাও একটি তাত্পর্য সৃষ্টি করে :
SELECT 'CAST none', val FROM testtable WHERE char_name LIKE 'A'
UNION ALL
SELECT 'CAST both', val FROM testtable WHERE
CAST(char_name AS CHAR) LIKE CAST('A' AS CHAR)
UNION ALL
SELECT 'CAST col', val FROM testtable WHERE CAST(char_name AS CHAR) LIKE 'A'
UNION ALL
SELECT 'CAST value', val FROM testtable WHERE char_name LIKE CAST('A' AS CHAR)
এটি কেবল "CAST উভয়" এবং "CAST করল" এর জন্য সারি প্রদান করে।
লাইক কীওয়ার্ড নিঃসন্দেহে একটি "পারফরম্যান্স মূল্য-ট্যাগ" সংযুক্ত সঙ্গে আসে with এটি বলেছিল, আপনার কাছে যদি কোনও ইনপুট ক্ষেত্র থাকে যা আপনার ক্যোয়ারীতে ওয়াইল্ড কার্ডের অক্ষরগুলি অন্তর্ভুক্ত করতে পারে তবে আমি যদি কেবল ইনপুটটিতে বন্য কার্ডের অন্তর্ভুক্ত থাকে তবে LIKE ব্যবহারের পরামর্শ দেব । অন্যথায় তুলনা করার সমান স্ট্যান্ডার্ডটি ব্যবহার করুন।
শুভেচ্ছান্তে...
ওরাকল-এ 'ওয়াইল্ডকার্ডসহীন' 'লাইক' একই ফলটিকে 'সমান' হিসাবে ফিরিয়ে দেবে, তবে অতিরিক্ত প্রক্রিয়াজাতকরণের প্রয়োজন হতে পারে। টম কিটের মতে , ওরাকল আক্ষরিক ব্যবহার করার সময় কোনও ওয়াইল্ডকার্ডের সাথে 'সমান' হিসাবে বিবেচনা করবে না, তবে বাইন্ড ভেরিয়েবল ব্যবহার করার সময় নয়।