মাইএসকিউএল নির্বাচন করুন যেখানে কলামটি খালি নয়


182

মাইএসকিউএল এ, আমি কি কেবল যেখানে কলাম বিদ্যমান সেখানে কলামগুলি নির্বাচন করতে পারি?

উদাহরণস্বরূপ, আমার নিম্নলিখিত জিজ্ঞাসা রয়েছে:

select phone, phone2
from jewishyellow.users
where phone like '813%'
and phone2

আমি কেবলমাত্র সারিগুলি নির্বাচন করার চেষ্টা করছি যেখানে ফোনটি 813 দিয়ে শুরু হয় এবং ফোন 2 এর মধ্যে কিছু রয়েছে।


2
" phone2এর মধ্যে কিছু আছে " এর দ্বারা আপনি কী বোঝাতে চেয়েছেন তা কি আপনি পরিষ্কার করতে পারেন? লোকেরা আপনার অর্থ বাতিল phone2নয়, ফাঁকা নয়, একচেটিয়া সাদা জায়গা নয়, ইত্যাদি সম্পর্কে
অনুমানগুলি নিচ্ছেন

1
যদি "কিছু" বিদ্যমান থাকে তবে তা অবশ্যই শূন্য নয়।
মাইক

উত্তর:


277

phone2খালি স্ট্রিংয়ের সাথে মানটির তুলনা করুন :

select phone, phone2 
from jewishyellow.users 
where phone like '813%' and phone2<>''

দ্রষ্টব্য যে NULLমান হিসাবে ব্যাখ্যা করা হয় false


5
একক উদ্ধৃতি, ডাবল কোট নয়।
ওএমজি পনিস

2
phone2<>""এটি কোনও এসকিউএল সিন্ট্যাক্স পরীক্ষককে অতীত করবে না।
ওএমজি পনিস

5
@ ওএমজি পনিস: তবে এটি মাইএসকিএলে কাজ করে। এটি কেবলমাত্র পরীক্ষক ব্যাপার যে
ইভান Nevostruev

7
@ আইভান: আমার কাছে খবর, সে সম্পর্কে দুঃখিত।
ওএমজি পনিস 21

<> একই! =। এটা সহজ ছিল। তবে আমি জানতাম না :)
এমফারুকি

48

ক্ষেত্রটি নুল ব্যবহার করে কিনা তা পরীক্ষা করতে IS NULL,IS NOT NULL অপারেটর।

মাইএসকিউএল রেফারেন্স http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html


10
ওপি কেবলমাত্র সারিগুলির বিষয়ে জিজ্ঞাসা করছে যা ফোন 2 ক্ষেত্রে কিছু রয়েছে। আক্ষরিকভাবে NULL তে সেট করা নেই এমন সমস্ত কিছুই NULL দেয় না, এমনকি খালি স্ট্রিংও ""। ! = '', বা <> '' যেমন ইভান গৃহীত উত্তরে বলেছিল, খালি স্ট্রিং বা NULL মানগুলি ফেরত দেবে না। অন্য কথায় NULL হয় না! = '' এর একটি উপসেট, তবে সেগুলি সমতুল্য নয়।
কোনটি

34

NULLস্ট্রিং মানগুলি এবং খালি পরীক্ষা করুন :

select phone
, phone2 
from users 
where phone like '813%' 
and trim(coalesce(phone2, '')) <>''

NB আমি মনে করি COALESCE () এসকিউএল স্ট্যান্ডার্ড (-শ), যেখানে ISNULL () নেই।


1
আপনার ট্রিম ফাংশনটি ব্যবহার করার দরকার নেই, যেহেতু মাইএসকিউএলে যে কোনও সংখ্যক স্পেসের একটি স্ট্রিং কোনও স্পেসের সংখ্যার অন্য স্ট্রিংয়ের সমান, আমি এর উপর বেশ কিছু বিশদে স্ট্যাকওভারফ্লো.com/a/
ব্রায়ান

25

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

SELECT t.phone, 
       t.phone2 
  FROM jewishyellow.users t
 WHERE t.phone LIKE '813%' 
   AND t.phone2 > ''

> ''অংশটি লক্ষ্য করুন , যা মানটি শূন্যস্থান বা ফাঁকা নয় কিনা তা পরীক্ষা করবে।

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

পরীক্ষার কেস:

SELECT if(NULL > '','true','false');-- false
SELECT if('' > '','true','false');-- false
SELECT if(' ' > '','true','false');-- false
SELECT if('\n' > '','true','false');-- false
SELECT if('\t' > '','true','false');-- false
SELECT if('Yeet' > '','true','false');-- true

আপডেট এই বিষয়ে একটি সতর্কতা রয়েছে যা আমি প্রত্যাশা করিনি, তবে শূন্য বা নীচে যে সংখ্যাসূচক মানগুলি ফাঁকা স্ট্রিংয়ের চেয়ে বড় নয় , তাই আপনি যদি শূন্য বা নেতিবাচক হতে পারে এমন সংখ্যার সাথে কাজ করে থাকেন তবে এটি করবেন না , এটি আমাকে সম্প্রতি বিট করেছে এবং ডিবাগ করা খুব কঠিন ছিল :(

যদি আপনি স্ট্রিং (চর, বারচর, পাঠ্য ইত্যাদি) ব্যবহার করেন তবে এটি পুরোপুরি ঠিক থাকবে, কেবল সংখ্যার সাথে সতর্ক থাকুন।


17

যদি অপ্রত্যাশিত ডেটা এন্ট্রি থেকে ফোন 2 ক্ষেত্রে ফাঁকা স্থান থাকে, আপনি আইএফএনএলএল এবং ট্রিম ফাংশন সহ সেই রেকর্ডগুলি উপেক্ষা করতে পারেন:

SELECT phone, phone2
FROM jewishyellow.users
WHERE phone LIKE '813%'
    AND TRIM(IFNULL(phone2,'')) <> '';

আপনার ট্রিম ফাংশনটি ব্যবহার করার দরকার নেই, যেহেতু মাইএসকিউএলে যে কোনও সংখ্যক স্পেসের একটি স্ট্রিং কোনও স্পেসের সংখ্যার অন্য স্ট্রিংয়ের সমান, আমি এর উপর বেশ কিছু বিশদে স্ট্যাকওভারফ্লো.com/a/
ব্রায়ান

7
select phone, phone2 from jewishyellow.users 
where phone like '813%' and phone2 is not null

6
মনে রাখবেন যে মধ্যে একটি পার্থক্য আছে যে NULLমান এবং একটি খালি স্ট্রিং ''যা হয় একটি মান। আপনি যদি খালি স্ট্রিংয়ের বিরুদ্ধে পরীক্ষা করতে চান column <> ''তবে অন্যান্য উত্তরের পরামর্শ অনুসারে ব্যবহার করুন ।
ডিজনেয়েট

7
SELECT phone, phone2 
FROM jewishyellow.users 
WHERE phone like '813%' and (phone2 <> "");

আপনার ডিফল্ট মানটি কী তার উপর নির্ভর করে কিছু টুইটচিহ্নের প্রয়োজন হতে পারে। যদি আপনি নাল পূরণ করতে দিয়ে থাকেন তবে তার পরিবর্তে আপনি "নট নুল" করতে পারবেন যা স্পষ্টতই ভাল।


আমি আপনাকে চিহ্নিত করব না কিন্তু: 1) NOT()মাইএসকিউএল 2 তে কোনও ফাংশন নেই ) phone2=""এটি কোনও এসকিউএল সিন্ট্যাক্স পরীক্ষককে অতীত করে তুলবে না।
ওএমজি পনিস

1
হেই, দুঃখিত। আমি প্রচুর আলাদা এসকিউএল সার্ভার ব্যবহার করি।
স্যাটোনিকপপি

2

আমরা কিছু চর বা স্ট্রিংয়ের ফাঁকা মান নির্ধারণের জন্য CASE ব্যবহার করতে পারি। আমি ডিএল্ট স্ট্রিং হিসাবে এনএ ব্যবহার করছি।

SELECT phone,   
CASE WHEN phone2 = '' THEN 'NA' END AS phone2 ELSE ISNULL(phone2,0) 
FROM jewishyellow.users  WHERE phone LIKE '813%'

2

আরেকটি বিকল্প হ'ল বিশেষভাবে CHAR_LENGTHকলাম মানগুলির দিকে নজর দেওয়া । (বিভ্রান্ত না করা LENGTH)

একটি মানদণ্ড যেখানে চরিত্র দৈর্ঘ্য 0 থেকে বেশি হয়, ব্যবহার যেমন একটি মান সঙ্গে একটি পূর্ণসংখ্যা কলামের ঘটনা হিসেবে মিথ্যা positives যখন কলাম মান falsey হতে পারে, এড়াতে হবে 0বা NULL। বিভিন্ন ধরণের ডেটা-ধরণের জুড়ে আরও ধারাবাহিকভাবে আচরণ করা।

যা কমপক্ষে 1 টি অক্ষর দীর্ঘ, বা অন্যথায় শূন্য নয় এমন কোনও মানের ফলাফল দেয়।

উদাহরণ https://www.db-food.com/f/iQvEhY1SH6wfruAvnmWdj5/1

SELECT phone, phone2
FROM users
WHERE phone LIKE '813%'
AND CHAR_LENGTH(phone2) > 0

সারণী ডেটা

users
phone (varchar 12) | phone2 (int 10)
"813-123-4567"     | NULL
"813-123-4567"     | 1
"813-123-4567"     | 0

users2
phone (varchar 12) | phone2 (varchar 12)
"813-123-4567"     | NULL
"813-123-4567"     | "1"
"813-123-4567"     | "0"
"813-123-4567"     | ""

CHAR_LENGTH(phone2) > 0ফলাফল (একই)

users
813-123-4567       | 1
813-123-4567       | 0

users2
813-123-4567       | 1
813-123-4567       | 0

বিকল্প

phone2 <> ''ফলাফল (পৃথক)

users
813-123-4567       | 1

users2
813-123-4567       | 1
813-123-4567       | 0

phone2 > ''ফলাফল (পৃথক)

users
813-123-4567       | 1

users2
813-123-4567       | 1
813-123-4567       | 0

COALESCE(phone2, '') <> ''ফলাফল (একই)
দ্রষ্টব্য: ফলাফলগুলি phone2 IS NOT NULL AND phone2 <> ''প্রত্যাশিত নয় এমন থেকে পৃথক

users
813-123-4567       | 1
813-123-4567       | 0

users2
813-123-4567       | 1
813-123-4567       | 0

phone2 IS NOT NULL AND phone2 <> ''ফলাফল (পৃথক)

users
813-123-4567       | 1

users2
813-123-4567       | 1
813-123-4567       | 0

2

আশ্চর্যজনকভাবে (যেমনটি আগে কেউ উল্লেখ করেনি) পাওয়া গেছে যে নীচের শর্তটি কাজ করে:

WHERE ORD(field_to_check) > 0 

যখন আমাদের নাল এবং ফাঁকা উভয় মান বাদ দিতে হবে। পদ্ধতির ডাউনসাইড সম্পর্কে কেউ কি সচেতন?


ive সিঙ্কট্যাক্সটি সঠিক করার জন্য কয়েক ঘন্টা চেষ্টা করে যাচ্ছিল এবং এটি সমাধান করেছেন সমস্ত কিছু ধন্যবাদ!
ডেমো

1

ব্যবহার করুন:

SELECT t.phone, 
       t.phone2 
  FROM jewishyellow.users t
 WHERE t.phone LIKE '813%' 
   AND t.phone2 IS NOT NULL

1
আমি লক্ষ্য করেছি যে কখনও কখনও IS NOT NULLখালি মান ( '') সহ কেবল কলামগুলিতে স্ট্রিং প্রয়োগ করা হয় না । কেন জানি না, তবে কেবল এটি উল্লেখ করতে চেয়েছিলাম। t.phone2 <> ''খালি স্ট্রিং কলামগুলির জন্য পরীক্ষা করার সময় এটি ব্যবহার করা বুদ্ধিমানের কাজ ।
ডিজনেয়

0

এটি অর্জনের জন্য আপনি অপারেটর ওয়াইল্ডকার্ডের মতো ব্যবহার করতে পারেন:

SELECT t.phone, 
       t.phone2 
FROM jewishyellow.users t
WHERE t.phone LIKE '813%' 
  AND t.phone2 like '[0-9]';

এইভাবে, আপনি এমন সমস্ত ফোন 2 পেতে পারেন যার একটি নম্বর উপসর্গ রয়েছে।


0

আমার ক্ষেত্রে আমার একটি ভারচার কলাম ছিল, দুটি পদ্ধতিই IS NOT NULL& != '' কাজ করে না , তবে নিম্নলিখিতগুলি আমার জন্য কাজ করেছিল। এই এখানে রাখছি।

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