আমি কীভাবে স্কোয়ার বন্ধনীর হাত থেকে বাঁচতে পারি?


236

আমি পছন্দ মতো একটি স্টোরেজ পদ্ধতিতে আইটেমগুলি ফিল্টার করার চেষ্টা করছি। কলামটি একটি বারচর (15)। আমি যে আইটেমগুলি ফিল্টার করার চেষ্টা করছি তার নামে বর্গাকার বন্ধনী রয়েছে।

উদাহরণস্বরূপ: WC[R]S123456

আমি যদি LIKE 'WC[R]S123456'এটি করি তবে তা কিছুই ফিরিয়ে দেবে না।

এর ESCAPEসাথে কীওয়ার্ডটি ব্যবহার করার জন্য আমি কিছু তথ্য পেয়েছি LIKEতবে বর্গাকার বন্ধনীগুলিকে নিয়মিত স্ট্রিং হিসাবে বিবেচনা করার জন্য এটি কীভাবে ব্যবহার করব তা আমি বুঝতে পারি না।

উত্তর:


328
LIKE 'WC[[]R]S123456' 

অথবা

LIKE 'WC\[R]S123456' ESCAPE '\'

কাজ করা উচিত.


10
আপনি যদি কাস্টম এস্কেপ ক্যারেক্টার ব্যবহার করতে চান তবে ব্যাকস্ল্যাশটি সত্যই কাস্টম হয় The
রায়ান কোহন

2
আমি উত্তরের অন্য অংশটিও সংশোধন করেছি। সংস্করণগুলির আগে ও পরে এসকিউএল ফিডল
মার্টিন স্মিথ

10
যদি বন্ধনীটি কেন পালাতে হয় সে সম্পর্কে কেউ যদি অস্পষ্ট থাকে তবে LIKE এর জন্য ডকুমেন্টেশন ইঙ্গিত দেয় যে এটি একটি পরিসরে বা সেটে কোনও একক চরিত্রের সাথে মেলে। উদাহরণস্বরূপ, ব্যবহার করে LIKE '[fz]oo''ফু' এবং 'চিড়িয়াখানা' উভয়ই মিলবে।
হলিস্টিক বিকাশকারী

3
উত্তরে এই দুজনের পক্ষে যুক্তি রেখে ভাল লাগবে। আমি নীচে অমিতেশের উত্তর না পড়া পর্যন্ত প্রথম উদাহরণটি কেন কাজ করবে তা অবিলম্বে আমার কাছে স্পষ্ট ছিল না।
ডন জুয়েট

1
LIKE 'WC\[R]S123456' ESCAPE '\'এটি রক্ষণাবেক্ষণের জন্য আরও পঠনযোগ্য হিসাবে পছন্দ করুন ।
ফায়ার দ্রুড

119

ধরা যাক আপনি আক্ষরিক মিল করতে চান its[brac]et

আপনার এড়াতে হবে না ]কারণ এটির জুটি তৈরি করা হলেই এর বিশেষ অর্থ রয়েছে [

সুতরাং [সমস্যা সমাধানের জন্য পর্যাপ্ত অব্যাহতি । [ এটিকে প্রতিস্থাপন করে আপনি পালাতে পারবেন [[]


7
এটি সত্যই সহায়ক এবং ইমো সেরা উত্তর ছিল।
জ্যারেড সল

1
[[]অদ্ভুত লাগছে তবে আপনি যখন এটি বিশ্লেষণকারী দৃষ্টিকোণ থেকে দেখেন তখন তা বোধগম্য হয়। পার্সারের মধ্যে অক্ষরগুলি কীভাবে পরিচালনা করতে হয় তার একটি নির্দিষ্ট নিয়ম রয়েছে [ ]। সুতরাং, পাঠ্যের its[brac]etঅর্থ: "নিম্নলিখিত ক্রমাগত স্ট্রিংগুলি সন্ধান করুন:, its(বর্গাকার বন্ধনীগুলির জন্য বিধি প্রয়োগ করুন brac:), et" । অন্যদিকে, এর its[[]brac]etঅর্থ: "নিম্নলিখিত ক্রমাগত স্ট্রিংগুলি সন্ধান করুন:, its(বর্গাকার বন্ধনীগুলির জন্য বিধি প্রয়োগ করুন [:), brac]et"
ব্রায়ান

28

আমার নামগুলি বাদ দেওয়া দরকার যা একটি ক্যোয়ারী থেকে আন্ডারস্কোর দিয়ে শুরু হয়েছিল, তাই আমি এটি দিয়ে শেষ করেছিলাম:

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character

2
আমাকে এই সংস্করণটি ব্যবহার করতে হয়েছিল (স্পষ্টভাবে "পলায়ন" চরিত্রটি উল্লেখ করে) - অন্য উত্তরগুলি এখানে আমার জন্য সঠিক ফলাফল দেয় নি।
MarcE


15

ESCAPE কীওয়ার্ডটি ব্যবহার করা হয় যদি আপনি সাধারণত% এবং _ এর মতো বিশেষ অক্ষর অনুসন্ধান করতে চান যা সাধারণত ওয়াইল্ড কার্ড। আপনি যদি এসকেপই নির্দিষ্ট করে থাকেন, এসকিউএল% এবং _ অক্ষরের জন্য অক্ষরে অক্ষরে অনুসন্ধান করবে।

আরও কয়েকটি উদাহরণ সহ একটি ভাল নিবন্ধ এখানে

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'

6

আপনার যদি '_' (আন্ডারস্কোর) এর মতো বিশেষ অক্ষরগুলি থেকে বাঁচার দরকার হয় , এবং আপনি কোনও এসকেপই ধারাটি সংজ্ঞায়িত করতে / সক্ষম নন তবে আপনি বিশেষ অক্ষরটি বর্গক্ষেত্র বন্ধনী দ্বারা আবদ্ধ করতে চাইতে পারেন [ ' এবং '] '

এটি "অদ্ভুত" স্ট্রিংটির অর্থ [[]] ব্যাখ্যা করে - এটি কেবল '[' অক্ষরটিকে বর্গাকার বন্ধনী সহ জড়িয়ে ধরে , কার্যকরভাবে এড়িয়ে যায়।

আমার ব্যবহারের ক্ষেত্রে প্রোফাইলারের ফিল্টার মানদণ্ড হিসাবে আন্ডারস্কোর সহ একটি সঞ্চিত পদ্ধতির নাম উল্লেখ করা ছিল। সুতরাং আমি একটি টেক্সটডাটা লাইক ক্ষেত্রে [_] একটি [_] সঞ্চিত [_] পদ্ধতি%%) এর '% নাম [_] রেখেছি এবং এটি আমাকে অর্জন করতে চাইলে ট্রেস ফলাফল দিয়েছে।

ডকুমেন্টেশন থেকে এখানে একটি ভাল উদাহরণ: লাইক (লেনদেন-এসকিউএল) - ওয়াইল্ডকার্ড অক্ষরগুলিকে লিটারাল হিসাবে ব্যবহার করা


4

ডকুমেন্টেশন অনুযায়ী :

আপনি ওয়াইল্ডকার্ড প্যাটার্ন মিলিয়ে অক্ষরগুলিকে আক্ষরিক অক্ষর হিসাবে ব্যবহার করতে পারেন। একটি ওয়াইল্ডকার্ড অক্ষরকে আক্ষরিক চরিত্র হিসাবে ব্যবহার করতে, ওয়াইল্ডকার্ড অক্ষরটিকে বন্ধনীতে আবদ্ধ করুন।

আপনাকে এই তিনটি অক্ষর থেকে বাঁচতে হবে %_[:

'5%'      LIKE '5[%]'      -- true
'5$'      LIKE '5[%]'      -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar'   -- true

1

কীবোর্ডে '\' বা অন্য কোনও চরিত্রের পরিবর্তে, আপনি বিশেষ অক্ষরগুলিও ব্যবহার করতে পারেন যা কীবোর্ডে নেই। আপনার ব্যবহারের ক্ষেত্রে এটি নির্ভর করে এটি প্রয়োজনীয় হতে পারে, যদি আপনি না চান তবে ইউজার ইনপুটটি ঘটনাক্রমে একটি পালানোর চরিত্র হিসাবে ব্যবহৃত হতে পারে।


2
আমি প্রায়শই ব্যবহার করি ¬- এটি এখনও যুক্তরাজ্যে একটি কীবোর্ড চরিত্র তবে খুব কমই জেনে শুনে ব্যবহার করা হয়েছে :) (উপরের বাম দিকে Escএবং Tab)
Andi মোহর

ব্যবহারকারীগণ এখনও অক্ষরযুক্ত ডেটা জমা দিতে পারেন যা কীবোর্ডে নেই। এই উত্তরটি সন্দেহজনকরূপে সমস্যার
সমাধানটি

0

অনুসরণ অনুসরণ করুন।

ব্যবহারকারীর ইনপুটটিকে এটির মতো সন্ধান করতে, পলায়ন ব্যবহার করুন, এর জন্য এটি সমস্ত বিশেষ অক্ষরের (নীচে সমস্ত এসকিউএল সার্ভারকে কভার করে) জন্য নিম্নলিখিত প্রতিস্থাপনের প্রয়োজন হবে।

এখানে একক উদ্ধৃতি "" "নেওয়া হয় নি কারণ এটি ধারাটির মতো প্রভাবিত করে না কারণ এটি স্ট্রিং কনটেন্টেশনের বিষয়।

"-" & "^" & "]" প্রতিস্থাপনের প্রয়োজন হয় না কারণ আমরা "" "পালিয়ে যাচ্ছি।

String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");

তারপরে, এসকিউএল ক্যোয়ারিতে এটি নিম্নলিখিত হিসাবে হওয়া উচিত। (প্যারামিটারাইজড কোয়েরিতে স্ট্রিং উপরের প্রতিস্থাপনের পরে নিদর্শনগুলির সাথে যুক্ত করা যেতে পারে)।

সঠিক স্ট্রিং অনুসন্ধান করতে।

like 'FormattedString' ESCAPE 'ð'

স্ট্রিং দিয়ে শুরু অনুসন্ধান

like '%FormattedString' ESCAPE 'ð'

স্ট্রিং দিয়ে শেষ সন্ধান করতে

like 'FormattedString%' ESCAPE 'ð'

স্ট্রিং সহ কন্টেন্ট অনুসন্ধান করতে

like '%FormattedString%' ESCAPE 'ð'

এবং অন্যান্য প্যাটার্ন মিলের জন্য। তবে উপরে উল্লিখিত হিসাবে সরাসরি ব্যবহারকারী ইনপুটটির ফর্ম্যাট করা দরকার।


0

যেদিকে একটি সমস্যা আছে:

LIKE 'WC[[]R]S123456' 

এবং:

LIKE 'WC\[R]S123456' ESCAPE '\'

উভয়ই এসকিউএল সার্ভারের জন্য কাজ করে তবে দু'জনেই ওরাকল-এর পক্ষে কাজ করে না।

দেখে মনে হচ্ছে একটি বাম ব্রেস জড়িত একটি প্যাটার্নটি সনাক্ত করার জন্য কোনও আইএসও / আইইসি 9075 উপায় নেই।

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