লাইক ফিল্টারটিতে ইন্ডস্কোর চরিত্রটি ব্যবহার করা কেন আমাকে সমস্ত ফলাফল দেয়?


118

আমি একটি LIKEশর্ত সহ নীচে এসকিউএল কোয়েরি লিখেছি :

SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'

ইন LIKEআমি কোনো আন্ডারস্কোর অনুসন্ধান করতে চান %_%, কিন্তু আমি জানি আমার কলাম ডেটা কোন আন্ডারস্কোর অক্ষর আছে।

  • কোয়েরি আমাকে টেবিল থেকে সমস্ত রেকর্ড দেয় কেন?

নমুনা তথ্য:

create table Manager(
    id int
    ,managerid varchar(3)
    ,managername varchar(50)
    );

insert into Manager(id,managerid,managername)values(1,'A1','Mangesh');
insert into Manager(id,managerid,managername)values(2,'A2','Sagar');
insert into Manager(id,managerid,managername)values(3,'C3','Ahmad');
insert into Manager(id,managerid,managername)values(4,'A4','Mango');
insert into Manager(id,managerid,managername)values(5,'B5','Sandesh');

Sql-Fiddle


1
এটি স্কেল-ফিডল ক্যোয়ারী যুক্ত করে খুব সুন্দর তবে আপনার সাধ্যের পাঠ্য হিসাবে SO- তে কোয়েরিটি সর্বদা প্রদর্শন করা উচিত। অন্যথায় এই প্রশ্নটি লিঙ্ক পচায় ঝুঁকিপূর্ণ ।
টিম শ্মেলটার

_ :: একক চরিত্রের বিকল্প
ভাদালগি

উত্তর:


193

আপনার WHEREঅবস্থাটি এর মতো পরিবর্তন করুন :

WHERE mycolumn LIKE '%\_%' ESCAPE '\'

এটি ওরাকল পালাবার চরিত্রগুলিকে সমর্থন করার একটি উপায়। এখানে আপনি escapeকীওয়ার্ড দিয়ে পালানোর চরিত্রটি সংজ্ঞায়িত করেন । বিশদের জন্য ওরাকল ডক্সে এই লিঙ্কটি দেখুন

'_'এবং '%'একটি ওয়াইল্ডকার্ড হয় LIKESQL এর যে পরিচালিত বিবৃতি।

_চরিত্র (যে কোন) একটি একক চরিত্রের উপস্থিতি দেখায়। আপনার দ্বারা অনুসন্ধান করেন columnName LIKE '_abc', আপনার সারি থাকার সাথে ভালো ফলাফল দিতে হবে 'aabc', 'xabc', '1abc', '#abc'কিন্তু না 'abc', 'abcc', 'xabcd'ইত্যাদি।

'%'চরিত্র 0 বা তার বেশি অক্ষরের সংখ্যা মেলানোর জন্য ব্যবহার করা হয়। তার মানে, যদি আপনি দ্বারা অনুসন্ধান columnName LIKE '%abc', আপনার ফল দেবে না থাকার সঙ্গে 'abc', 'aabc', 'xyzabc'ইত্যাদি, কিন্তু কোন 'xyzabcd', 'xabcdd'এবং অন্য কোন স্ট্রিং, যাতে দিয়ে শেষ হয় না 'abc'

আপনার ক্ষেত্রে আপনি দ্বারা অনুসন্ধান করেছেন '%_%'। এটি সেই কলামটির সাথে সমস্ত সারি প্রদান করবে যার এক বা একাধিক অক্ষর রয়েছে, যার অর্থ কোনও অক্ষর, এর মান হিসাবে। _আপনার কলামের মানগুলিতে কোনও সত্ত্বেও আপনি সমস্ত সারি পাচ্ছেন না কেন ।


অ্যাক্সেস ডিবিতে আমি একই সমস্যার মুখোমুখি হই। আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি দয়া করে আমাকে বলতে পারেন।

সম্ভবত আপনি গুগল 'অ্যাক্সেস ডিবিতে ওয়াইল্ডকার্ড' করতে পারেন। আমি অ্যাক্সেসে কখনই কাজ করি নি, তাই আমি আপনাকে এটিতে সহায়তা করতে পারি না। এমনকি অ্যাক্সেস likeঅপারেটরকে সমর্থন করে কিনা সন্দেহ doubt আমার সমাধানটি বেশিরভাগ ক্ষেত্রে, যদি না হয় তবে ডেটাবেসগুলিতে কাজ করবে।
রচ্চা

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

87

আন্ডারস্কোরটি একটি স্বেচ্ছাসেবী চরিত্রের প্রশ্নের জন্য ওয়াইল্ডকার্ডLIKE

সুতরাং এর LIKE %_%অর্থ "এই কলামে কমপক্ষে একটি স্বেচ্ছাচারী চরিত্র সহ আমাকে সমস্ত রেকর্ড দিন"।

[]চারপাশের স্কেল সার্ভারে আপনাকে ওয়াইল্ডকার্ড চরিত্রটি থেকে বাঁচতে হবে:

SELECT m.* 
FROM Manager m 
WHERE m.managerid    LIKE  '[_]%'
AND   m.managername  LIKE '%[_]%'

দেখুন: লাইক (লেনদেন-এসকিউএল)

Demo


আপনার উত্তরের মধ্যে এমএসডিএন লিঙ্ক সরবরাহ করার জন্য আপনাকে ধন্যবাদ। আমি আপনার পোস্টটি পড়া না হওয়া পর্যন্ত আন্ডারস্কোর বিশেষ চরিত্রের সম্পর্কে তথ্য সন্ধান করতে আমার বেশ কষ্ট হচ্ছিল।
ক্রিস স্মিথ

5
এটির সঠিক উত্তরটি হিসাবে ব্যবহারকারীরা sql-serverতাদের প্রশ্নের মধ্যে ট্যাগটি নির্দিষ্ট করেছেন এবং তাদের সরবরাহিত এসকিউএলফিডালকে এমএস এসকিউএল সার্ভার ২০০৮ হিসাবেও মনোনীত করা হয়েছে
গোবিন্দ রায়

8

আপনি বিশেষত কোনও ওয়াইল্ডকার্ড চরিত্রের সন্ধান করতে চাইলে আপনাকে এড়াতে হবে

ESCAPEআপনার LIKEঅভিব্যক্তিতে ক্লজ যুক্ত করে এটি করা হয় । ESCAPEধারাটির সাথে বর্ণিত অক্ষরটি নিম্নলিখিত ওয়াইল্ডকার্ড চরিত্রটিকে "অবৈধ" করবে।

আপনি যে কোনও চরিত্র পছন্দ করতে পারেন (কেবল কোনও ওয়াইল্ডকার্ডের অক্ষর নয়)। বেশিরভাগ লোক একটি ব্যবহার করে \কারণ এটি অনেক প্রোগ্রামিং ভাষাও ব্যবহার করে

সুতরাং আপনার প্রশ্নের ফলাফল হবে:

select * 
from Manager
where managerid LIKE '\_%' escape '\'
and managername like '%\_%' escape '\';

তবে আপনি ঠিক তেমন অন্য কোনও চরিত্রও ব্যবহার করতে পারেন:

select * 
from Manager
where managerid LIKE '#_%' escape '#'
and managername like '%#_%' escape '#';

এখানে একটি এসকিউএলফিডাল উদাহরণ রয়েছে: http://sqlfiddle.com/#!6/63e88/4


5

অ্যান্ডস্কোর কোনও কিছুর জন্য ওয়াইল্ডকার্ড। উদাহরণস্বরূপ 'A_%' এমন সমস্ত ম্যাচ সন্ধান করবে যা শুভ 'এ' শুরু করে এবং তার পরে সর্বনিম্ন 1 অতিরিক্ত অক্ষর থাকবে


0

আপনি কোয়েরিটি নীচে লিখতে পারেন:

SELECT * FROM Manager
WHERE managerid LIKE '\_%' escape '\'
AND managername LIKE '%\_%' escape '\';

এটি আপনার সমস্যার সমাধান করবে।


এটি কীভাবে গ্রহণযোগ্য উত্তরের বাইরে কিছু যুক্ত করে?
নোয়া ব্রলিক্স

0

লোকেরা কীভাবে এটি বিগকোয়ারিতে করবেন তা অনুসন্ধান করছে:

  • একটি আন্ডারস্কোর "_" একক অক্ষর বা বাইটের সাথে মেলে।

  • আপনি "\", "_", বা "%" দুটি ব্যাকস্ল্যাশ ব্যবহার করে পালাতে পারবেন। উদাহরণ স্বরূপ, "\%". আপনি যদি কাঁচা স্ট্রিং ব্যবহার করেন তবে কেবল একটি একক ব্যাকস্ল্যাশ প্রয়োজন required উদাহরণস্বরূপ, r "\%"।

WHERE mycolumn LIKE '%\\_%'

উত্স: https://cloud.google.com/bigquery/docs/references/standard-sql/operators

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