আমি কীভাবে চেক করব যে কোনও কলামটি মাইএসকিউএল ফাঁকা বা শূন্য রয়েছে কিনা?


288

আমার একটি টেবিলের কলাম রয়েছে যাতে শূন্য বা খালি মান থাকতে পারে। কোনও টেবিলে উপস্থিত সারিগুলিতে কোনও কলাম ফাঁকা বা নাল কিনা তা আমি কীভাবে চেক করব?

(e.g. null or '' or '  ' or '      ' and ...)

1
মাইএসকিউএল কোড: select isnull(mycolumn) from mytableমাইক্রোলোমটি বাতিল হলে 1 প্রদান করে।
এরিক লেসচিনস্কি

2
দৈর্ঘ্য (ট্রিম (মাইকোলম))> 0 সম্পর্কে কী?
সিরিল জ্যাকার্ট

এমএসএসকিউএল> যেখানে কলম্বন <> '' বা কোথা থেকে লেন (কলম্ব)> 0 বা কোথায় নুলিফ (এলটিআরআইএম (আরটিআরআইএম (কুলুম)), '') নল নয়
ডেক্সটিএক্স

উত্তর:


443

এটি যেখানে some_colআছে NULLবা ''(খালি স্ট্রিং) সমস্ত সারি নির্বাচন করবে

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';

7
আপনি যদি শর্তটি পরিবর্তন করেন WHERE some_col IS NULL OR some_col = ' ' (স্ট্রিংয়ের মধ্যে একটি স্থান সন্নিবেশ করা হয়) তবে এটি মাইএসকিউএল এবং ওরাকল উভয় ক্ষেত্রেই কাজ করে, "ওনেডেউইভেন" এর উত্তর দেখুন। some_col = ''ওরাকল-এ কাজ করে না কারণ খালি স্ট্রিংয়ের অর্থ সেখানে নাল।
জোহানা

1
@ জোহানা তবে আপনি যদি স্যুইচ করেন ' 'তবে এটি এসকিউএলাইটে কাজ করবে না। এটি কেবল অভিন্ন / ডাইরেক্ট স্ট্রিং ম্যাচিং করে।
ম্যাগনে

131

এসকিউএল -২২ স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত হিসাবে, যখন পৃথক পৃথক প্রস্থের দুটি স্ট্রিংয়ের তুলনা করা হয়, সংকীর্ণ মানটি প্রশস্ত মানের সাথে একই প্রস্থের জন্য এটি ফাঁকাগুলির সাথে ডান-প্যাডযুক্ত হয়। সুতরাং, সমস্ত স্ট্রিং মানগুলি পুরোপুরি শূন্যস্থান নিয়ে গঠিত (শূন্যস্থান সহ) সমান উদাহরণ হিসাবে গণ্য হবে

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

অতএব, কতগুলি স্পেসে some_colমান তৈরি করে তা বিবেচনা না করেই এটি কাজ করা উচিত :

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

বা আরও সংক্ষেপে:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;

6
প্যাডেড স্পেসগুলি উল্লেখ করার জন্য ধন্যবাদ। আপনি সেগুলি লাভ করতে পারেন এবং শর্তটি WHERE some_col IS NULL OR some_col = ' '(স্ট্রিংয়ে একটি স্থান সন্নিবেশ করাতে) এ পরিবর্তন করতে পারেন তবে এটি মাইএসকিউএল এবং ওরাকল উভয় ক্ষেত্রেই কাজ করে। some_col = ''ওরাকল-এ কাজ করে না কারণ খালি স্ট্রিংয়ের অর্থ সেখানে নুল হয় এবং সম্পূর্ণ শর্তটি নুল হয়ে যায়।
জোহানা

আমার প্রয়োজন ছিল মাইএসকিউএলে আমার জন্য সন্ধান SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; এবং SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;কাজ করা। আশা করি এটি কার্যকর হবে।
দিনুকা দয়ারথ্না

আসলে '' = ' 'এসকিউএল সার্ভারে কাজ করে তবে এসকিউএলাইটে নয়, যতদূর আমি বলতে পারি, এটি এখন পরীক্ষা করে testing
ম্যাগনে

66

শর্তটি লেখার একটি ছোট্ট উপায়:

WHERE some_col > ''

যেহেতু null > ''উত্পাদিত হয় unknown, এটি উভয় nullএবং খালি স্ট্রিংগুলি ফিল্টার করে ফেলার প্রভাব ফেলে ।


2
এটির বিপরীত হওয়ার, সমস্ত রেকর্ড যেখানে এটি নুল বা খালি স্ট্রিং রয়েছে সেখানে পাওয়ার কোনও উপায় আছে?
জোশুয়া পিন্টার

14
@ জোশপিন্টার:coalesce(some_col, '') = ''
অ্যান্ডোমার

6
এটি কখনও কখনও সত্য হতে পারে তবে মাইএসকিউএল 14.14 এ কাজ করে না।
গুনার আর ম্যাগনসন

দুর্দান্ত কাজ করে এবং বাস্তবে আমি মারিয়াডিবি
নিল ডেভিস

1
এর বিপরীতটি খুঁজে পেতে আমি কিছু_col <> '' ব্যবহার করি
চার্জন

18

আপনি পরীক্ষা করতে পারেন কোনও কলামটি নাল বা নাল নয় ব্যবহার করে WHERE col IS NULLবা WHERE col IS NOT NULLযেমন eg

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

আপনার উদাহরণে আপনার কাছে সাদা জায়গার বিভিন্ন অনুমতি রয়েছে। আপনি ব্যবহার করে সাদা স্থানটি ছিনিয়ে নিতে TRIMপারেন এবং আপনি COALESCEকোনও নুল মান ডিফল্ট করতে ব্যবহার করতে পারেন (কোএলসসিই আপনি যে মানগুলি সরবরাহ করেন সেগুলি থেকে প্রথম নন-মানটি ফিরিয়ে দেবে।

যেমন

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = '' 

এই চূড়ান্ত ক্যোয়ারী যেখানে সারি ফিরে আসবে MyCol শালীন বা সাদা জায়গার কোনও দৈর্ঘ্য।

যদি আপনি এটি এড়াতে পারেন তবে WHERE ধারাটিতে কোনও কলামে ফাংশন না করাই ভাল কারণ এটি সূচী ব্যবহার করা শক্ত করে তোলে। যদি আপনি কেবল কলামটি নালাগুলি বা খালি হয় তা খতিয়ে দেখতে চান, আপনি এটি করে ভাল হতে পারেন:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

দেখুন TRIM একসঙ্গে বেড়ে ওঠা এবং নালআরও তথ্যের জন্য ।

এছাড়াও নাল মান নিয়ে কাজ করা মাইএসকিউএল ডক্স থেকে


2
আপনি আসল সমাধানটি অত্যন্ত বিভ্রান্ত উপায়ে উপস্থাপন করেছেন। প্রথমে আপনি তার সমস্যার একটি অসম্পূর্ণ সমাধান উপস্থাপন করুন "যেখানে মাইকোল নাল"। তারপরে আপনি যেখানে দুটি ধারাবদ্ধ ফাংশন ব্যবহার করে একটি সলিউশন উপস্থাপন করেন, এমনকি এটি এড়ানো উচিত বলেও। তবেই আপনি আসল সমাধান পেতে পারেন। ভবিষ্যতে, আপনার আসল সমাধানটি প্রথমে উপস্থাপন করুন।

আপনার দ্বিতীয় উদাহরণে সাইন ইন )করার আগে একটি মিস করা=
রোরিম

15

WHERE ব্যতীত অন্য একটি পদ্ধতি, এটি চেষ্টা করুন ..

খালি এবং NULL উভয় মান নির্বাচন করবে

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

এটি 1 ফিরে আসে যদি কিছু নাল থাকে তবে কেন এমন হয়?
নুবি-পিএইচপি

NULLIF খালি মানটির জন্য ক্ষেত্রের নাম পরীক্ষা করে এবং এটি খালি হলে NULL তে রূপান্তরিত করে। আইএসএনএলএল 1 (সত্য) ফেরত দেয় যদি নুলিফ সফলভাবে একটি শূন্য ক্ষেত্রটি NULL এ পরিবর্তন করে বা যদি এটি ইতিমধ্যে NULL হয় .... তবে দুটি স্বতন্ত্র সিলেক্ট করা সিলেক্ট (এক্স) সহ একটি টেবিলের শূন্য এবং ফাঁকা মাঠে নিজের জন্য চেষ্টা করুন X , নুলিফ (y)
পডটেক.ওয়ে


6

আমি আমার ডাটাবেসে অগোছালো ক্ষেত্রকে ঘৃণা করি। কলামটি যদি ফাঁকা স্ট্রিং বা নাল হতে পারে তবে আমি প্রতিবারই সিলেক্ট করার আগে বরং এটি ঠিক করে ফেললাম:

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

এটি ডেটা পরিষ্কার রাখে, যতক্ষণ না আপনার কোনও কারণে বিশেষত NULL এবং খালি মধ্যে পার্থক্য করার প্রয়োজন হয় না।



5

এই বিবৃতিটি আমার জন্য আরও পরিস্কার এবং আরও পঠনযোগ্য:

select * from my_table where ISNULL(NULLIF(some_col, ''));

4

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

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

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

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

  • মাইএসকিউএল: TRIM(), RTRIM(), LTRIM()
  • ওরাকল: RTRIM(), LTRIM()
  • SQL সার্ভার: 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

যদি আপনি অর্ডার দ্বারা করার সময় নাল মানগুলি সর্বশেষে উপস্থাপন করতে চান তবে এটি চেষ্টা করুন:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;

3

আপনি করতে পারেন

SELECT * FROM table WHERE column_name LIKE ''

বিপরীত সত্তা

SELECT * FROM table WHERE column_name NOT LIKE ''

দৃশ্যত কাজ করে না: select NULL like ''রিটার্ন NULL- অন্তত মাইএসকিউএলে।
তিতাস


1

নাল জন্য পরীক্ষা করুন

$column is null
isnull($column)

খালি জন্য চেক করুন

$column != ""

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


3
কখনও NULLমূল্যবোধ গ্রহণ না করা আলোচনার জন্য অন্য একটি সম্পূর্ণ বিষয়। আপনার যুক্তি সরবরাহ না করে সেই সুপারিশ করা উপযুক্ত বলে মনে করি না।
maček

আমি অন্তর্ভুক্ত করেছি, ধৈর্য ধরুন। প্লাসটি সত্যিই নূল ব্যবহার করে জীবনকে কঠিন করে তুলছে (ঠিক এই প্রশ্নের মতো)।
আজ্রিয়াল

5
এটি একটি ভয়ানক প্রস্তাবনা। একটি কলাম যার মান সন্নিবেশ সময় পরিচিত নাও হতে পারে শুধুমাত্র মত অ-মানক "নাল" মান ব্যবহার উৎসাহিত করার জন্য কাজ করে এ না শূন্য সেট -1এবং ''
ড্যান বেচার্ড

@ ড্যান যদি আপনি সন্নিবেশের সময় মান কী তা নিশ্চিত না হন তবে আপনার কোনও সম্ভাবনা অপ্টিমাইজেশন পরিচালনা করতে অসুবিধা হতে পারে
আজ্রিয়াল


0

আমার ক্ষেত্রে, ডেটা আমদানির সময় কলামে স্থানটি প্রবেশ করানো হয়েছিল এবং এটি খালি কলামের মতো দেখায় এটির দৈর্ঘ্য 1 ছিল So length(column) এই আমরা অনুসন্ধান ক্যোয়ারী লিখতে পারেন উপর ভিত্তি করে তারপর

টেবিল থেকে যেখানে নির্বাচন করুন নির্বাচন করুন (COLUMN) = খালি কলামের জন্য কলামের দৈর্ঘ্য


-1

যদি ডেটাটাইপটি স্ট্রিং হয় এবং সারিটি শূন্য হয় তবে এটি চেষ্টা করুন

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

যদি ডেটাটাইপটি int বা কলাম 0 হয় তবে এটি ব্যবহার করে দেখুন

SELECT * FROM table WHERE column_name > = 0

-2
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')

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