একক পরীক্ষার মাধ্যমে নাল / ফাঁকা / সাদা স্থানের মান কীভাবে পরীক্ষা করবেন?


88

আমি একটি নির্বাচনী বিবৃতি লিখতে চাই যা কোনও মূল্য ছাড়াই কলামগুলি ফেরত দিতে কেবল একটি পরীক্ষা ব্যবহার করে (নাল, খালি, বা সমস্ত স্থান)।

আমি ভেবেছিলাম এটি কার্যকর হবে:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

তবে এটি নুল মানগুলির জন্য কাজ করে না।

অবশ্যই আমি যোগ করতে পারেন

OR column_name IS NULL

এবং এটি কার্যকর হবে, তবে আমি একটি উপায় চাই যা একটি একক পরীক্ষা ব্যবহার করে।



একাধিক পরীক্ষা করা কি কাম্য নয়? যেমন আরও গ্রানুলারিটি = কীভাবে ডেটা সংশোধন করা যায় সে সম্পর্কে ব্যবহারকারীদের কাছে আরও ভাল প্রতিক্রিয়া।
onedaywhen

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

উত্তর:


101

কার্যকরভাবে, আপনি ব্যবহার করতে সক্ষম হওয়া উচিত

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

সমস্যাটি হ'ল COLUMN_NAME এ একটি সূচক ব্যবহার করা হবে না। আপনার যদি ট্রিম (কলাম_নাম) এর একটি ফাংশন-ভিত্তিক সূচী থাকতে হবে যদি এটি নির্বাচনী শর্ত হয়।


32
টি-এসকিউএল ব্যবহারকারীদের জন্য নোট: কোনও ট্রিম নেই, আপনার এলটিআরআইএম বা আরটিআরআইএম দরকার হবে।
demcodemonkey

11
এসকিউএল সার্ভার 2017 সাল থেকে একটি ট্রিম ফাংশন রয়েছে। উত্স
বিভিউইডট

4
@ এহমানান 365 এই প্রশ্নটি ওরাকল সম্পর্কে, স্কেল সার্ভার নয়।
এম এইচ

11
আরটিআরআইএম (এলটিআরআইএম (কলাম_নাম)) - মাইক্রোসফ্ট এসকিউএল ব্যবহারকারীদের জন্য।
DxTx

4
এসকিএল সার্ভারে ট্রিম (কলাম_নাম) খালি স্ট্রিং '' দেয়, নুল নয়। অন্যান্য উত্তরগুলি খালি স্ট্রিং এবং
এনএইউএল

25
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''

ISNULL(column_name, '') '' ফিরিয়ে দেবে যদি কলাম_নাম NULL হয়, অন্যথায় এটি কলাম_নামটি ফিরিয়ে দেবে।

হালনাগাদ

ওরাকলে, আপনি NVLএকই ফলাফল অর্জন করতে ব্যবহার করতে পারেন ।

SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''

4
আসলে এটি এখনও ওরাকলে কাজ করে না, ওরাকল খালি স্ট্রিংগুলিকে NULL হিসাবে বিবেচনা করে যাতে আপনার কাছে "পছন্দ নয়" "এর একটি ধারা থাকতে পারে যেহেতু এটি নাল মানের সাথে তুলনা করে
হ্যারিসন

আমি কি 'LIKE' 'র পরিবর্তে' 'পছন্দ করতে চাই না?
জন গর্ডন

হ্যাঁ, দুঃখিত, মূল প্রশ্নটি যার মূল্য রয়েছে তার সবকটি চাই হিসাবে ভুলভাবে পড়ুন। তবে জট বেঁধে বলা হয়েছে যে, ওরাকলে এটি কাজ করবে বলে মনে হচ্ছে না।
GendoIkari

যেহেতু আমি ওরাকল ব্যবহার করছি, দেখে মনে হচ্ছে যে আমি যেখানে নিখুঁত ট্রিম (কর্নেল) ব্যবহার করতে পারি এবং এটি নাল, ফাঁকা এবং সাদা স্থানের মান গ্রহণ করবে।
জন গর্ডন

স্পষ্টতই, প্রথম অংশটি একটি বন্ধনী অনুপস্থিত, এটি হওয়া উচিত:WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
সেরজ সাগান

15

NULLIF ফাংশন যে কোনও কলাম মানকে কেবল সাদা স্থান সহ একটি NULL মান রূপান্তর করবে। টি-এসকিউএল এবং এসকিউএল সার্ভার ২০০৮ এবং এর জন্য কাজ করে।

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL

4
একটি উত্তরের উত্তরটিতে কোডটির ব্যাখ্যা থাকবে এবং কেন এটি এভাবে লেখা হয়েছিল। আমি আপনাকে আপনার উত্তরটি আপডেট করার পরামর্শ দিচ্ছি :-)
কাইরেল

4
এর মূল কথা কি? এটি কেবল [কলাম_নামে] পছন্দ করুন '' পছন্দ করুন
সাইলেন্ট

একাধিক সাদা স্পেস সমর্থন করার জন্য এটি
ট্রিমের প্রয়োজন

4
এসকিউএল সার্ভার 2017 এ পরীক্ষা করা, এটি ট্রিম ছাড়াই একাধিক সাদা স্পেসের জন্য কাজ করে। এটি আমার কাছে বোধগম্য নয়, কারণ ডকুমেন্টেশন অনুসারে NULLIF কেবল তখনই NULL ফিরিয়ে আনতে হবে যখন দুটি এক্সপ্রেশন সমান হয় এবং স্পেসগুলির একটি স্ট্রিং সাধারণত খালি স্ট্রিংয়ের সমান হয় না। (আমি কেবল ফাঁকা জায়গাগুলির জন্য পরীক্ষা করেছি, ট্যাবগুলি, নিউলাইনগুলি বা অন্যান্য সাদা স্থানের অক্ষর নয়))
জোভি

4
@Jovie SQL সার্ভার কখনো কখনো হোয়াইটস্পেস trailing উপেক্ষা করে পড়তে: stackoverflow.com/questions/17876478/...
ব্রায়ান MacKay

7

null or Emptyএকটি কলামের মান পরীক্ষা করার সময় , আমি লক্ষ্য করেছি যে বিভিন্ন ডেটাবেসগুলিতে কিছু সমর্থন সংক্রান্ত উদ্বেগ রয়েছে।

প্রতিটি ডাটাবেস সমর্থন করে না TRIM পদ্ধতি

নীচে ম্যাট্রিক্সটি বিভিন্ন ডেটাবেস দ্বারা সমর্থিত পদ্ধতিগুলি বোঝার জন্য রয়েছে।

এসকিউএল-তে TRIM ফাংশনটি স্ট্রিং থেকে নির্দিষ্ট উপসর্গ বা প্রত্যয়টি সরাতে ব্যবহৃত হয়। সর্বাধিক সাধারণ প্যাটার্নটি মুছে ফেলা হচ্ছে সাদা জায়গা। এই ফাংশনটি বিভিন্ন ডেটাবেজে আলাদাভাবে বলা হয়:

  • মাইএসকিউএল: TRIM(), RTRIM(), LTRIM()
  • ওরাকল: RTRIM(), LTRIM()
  • SQL সার্ভার: TRIM(), RTRIM(), LTRIM()

খালি / নাল / সাদা স্থান কীভাবে পরীক্ষা করবেন: -

বিভিন্ন ডাটাবেস অনুসারে নীচে দুটি ভিন্ন উপায় রয়েছে-

এই ট্রিম ফাংশনগুলির জন্য বাক্য গঠনটি হ'ল:

  1. চেক করতে ট্রিম ব্যবহার -

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. পরীক্ষার জন্য এলটিআরআইএম এবং আরটিআরআইএম-এর ব্যবহার

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

উভয় উপায়ে উপরে একই ফলাফল সরবরাহ করে আপনার ডেটাবেস সহায়তার ভিত্তিতে ব্যবহার করুন। এটি খালি থাকলে কেবলমাত্র টেবিলটি FirstNameথেকে ফেরত দেয়UserDetailsLastName

এটি আশা করা অন্যকেও সহায়তা করবে :)


যেমনটি হিসাবে ('' সি ইউনিয়ন নির্বাচন করুন সমস্ত সিলেক্ট '' সি ইউনিয়ন সমস্ত সিউল নির্বাচন করুন) নির্বাচন করুন * যেখান থেকে এলটিআরএম (আরটিআরআইএম (সি)) নাল; এসকিউএল সার্ভারে 3 টি রেকর্ড
ওয়াকার

4
কেন এল এবং আরটিআরআইএম উভয়ের প্রয়োজন হবে? কলামটি খালি আছে কিনা তা পরীক্ষা করার জন্য কেবলমাত্র ফাংশনগুলির মধ্যে একটিরই যথেষ্ট হবে না?
সাইলেন্ট

4

এই পিএইচপিএমওয়াই অ্যাডমিন ক্যোয়ারী সেই সারিগুলি ফিরিয়ে দিচ্ছে, যেগুলি শূন্য বা খালি নয় বা কেবল শ্বেত স্পেস নয়:

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

আপনি যদি শূন্য / ফাঁকা / সবেমাত্র শ্বেতস্পেস রয়েছে এমন সারিগুলি নির্বাচন করতে চান তবে কেবল অপসারণ করবেন না।


2

কোয়েরির নীচে ব্যবহার করুন এবং এটি কাজ করে

SELECT column_name FROM table_name where isnull(column_name,'') <> ''

0

আমি IsNotNullOrEmptyOrWhiteSpaceটি-এসকিউএল এর জন্য যা ব্যবহার করি তা হ'ল:

SELECT [column_name] FROM [table_name]
WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0

0

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

*****হালনাগাদ*****

আমি এটি চেষ্টা করেছিলাম এবং এটি কাজ করেছে, কেন নিশ্চিত নয় যে <1 কাজ করলে কেন এটি কাজ করবে না তবে কোনও কারণে <2 কাজ করেছে এবং কেবলমাত্র রেকর্ডগুলি ফিরিয়ে দিয়েছে যার ক্ষেত্রটি খালি ফাঁকা is

[টেবিলনাম] থেকে [কলামনাম] নির্বাচন করুন যেখানে LENGTH (কলামনাম) <2;

আমি অনুমান করছি যে কোনও স্ক্রিপ্ট ডেটা রূপান্তর করতে ব্যবহৃত হয়েছিল তা ফাঁকা দেখানো সত্ত্বেও ক্ষেত্রটিতে কিছু রেখে গেছে, <2 কাজ করে তবে <1 নয় কেন এটি আমার অনুমান

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

আশা করি আমার সমাধানটি কোনওদিন সেখানে অন্য কাউকে সাহায্য করবে।


-3

ওরাকল যেমন আপনি মাইএসকিউএল তে এনভিএল ফাংশন ব্যবহার করতে পারেন আপনি এই পছন্দ হিসাবে আপনার পছন্দসই ফলাফল অর্জন করতে আইএফএনএলএল (columnaName, newValue) ব্যবহার করতে পারেন

SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';

-4

তুমি ব্যবহার করতে পার

SELECT [column_name] 
FROM [table_name]
WHERE [column_name] LIKE '% %' 
OR [column_name] IS NULL
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.