"_" (আন্ডারস্কোর) "-" (হাইফেন) মিলবে কেন?


110

এই কোয়েরিটি ব্যবহার করে আমাকে পিডিএফ ম্যানুয়ালটি সন্ধান করতে হবে:

root@localhost:test> select * from a where name like '%taz_manual%.pdf%';
+--------------------+------------------+-------------+
| name               | description      |        size | 
+--------------------+------------------+-------------+
| taz-manual-1.1.pdf | Manual v1.0 TA-Z |    31351902 |
| taz-manual-0.2.pdf | Manual v1.0 T1-A |     3578278 |
| taz_manual-2.0.pdf | Manual v2.0 GA-X |   542578278 |
etc........
+--------------------+------------------+-------------+
132 row in set (0.00 sec)

আমি নামটি নির্দিষ্ট করার সময় আমি কেন ড্যাশযুক্ত ব্যক্তিটিকে দেখছি taz_manual%.pdf?

উত্তর:


231

কারণ আন্ডারস্কোরটি _শতাংশের মতো একটি ওয়াইল্ডকার্ড %, এটি ছাড়া কেবল এটি একটি চরিত্রের সন্ধান করে।

এসকিউএল প্যাটার্নের মিলটি আপনাকে কোনও একক অক্ষরের সাথে মেলে "_" এবং একটি নির্বিচার সংখ্যক অক্ষরের সাথে শূন্য করতে ("শূন্য অক্ষর সহ)" "%" ব্যবহার করতে সক্ষম করে।

(বিভাগটি ৩.৩.৪. From থেকে মাইএসকিউএল ডকুমেন্টেশনে প্যাটার্ন মিলছে ।)

আপনি যদি আন্ডারস্কোরটিকে likeআক্ষরিক হিসাবে ব্যবহার করতে চান তবে আপনাকে এড়াতে হবে:

select * from a where name like '%taz\_manual%.pdf%';

আফাইক এটি তখনই প্রাসঙ্গিক যখন আপনি কোনও নিদর্শন প্রসঙ্গে থাকবেন। যেমন একটি LIKEবিবৃতি ভিতরে । যখন সমস্ত প্রতিস্থাপন _একটি সঙ্গে -: UPDATE sys_file set identifier = REPLACE(identifier, '_', '-') WHERE identifier LIKE '%\_%';। ভিতরে পালাবার LIKEএবং ভিতরে কোনও পালানোর বিষয়টি লক্ষ্য করুন REPLACE। (আমি এটি আশ্চর্যজনক মনে করি যে আপনি প্রতিস্থাপনের অভ্যন্তরের কোনও প্যাটার্নের প্রসঙ্গে নেই ...)
হাফেনক্র্যানিচ

মাইএসকিএল ডক্ট থেকে হাফেনক্র্যানিচ: "তুলনা অপারেটরগুলি পছন্দ করুন বা না পছন্দ করুন"
বুক অফ জিউস

2

স্পেস এবং হাইফেনের সাথে আমার একই রকম সমস্যা ছিল যখন সঠিক ম্যাচের সাথে স্ট্রিংয়ের মিল ছিল:

SELECT id FROM location WHERE name = 'IND - HQ';

উপরের প্রশ্নটি মাইএসকিউএলে কোনও রেকর্ড ফিরিয়ে দেয়নি। আমাকে ফাঁকা স্থান এবং হাইফেনগুলি ছেড়ে পালাতে হয়েছিল এবং LIKEসমান (=) এর সাথে নির্ভুল ম্যাচের পরিবর্তে ব্যবহার করতে হয়েছিল :

SELECT id FROM location WHERE name LIKE 'IND_\-_HQ';

আপনি কি নিশ্চিত যে এটি সম্পর্কিত? এই সঠিক নামের সাথে কোনও অবস্থানের সারি ছিল না ... ???
নিকো হাজেস

হ্যাঁ, অবস্থান = '
আইএনডি

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