সমান নয় <>! = NULL এ অপারেটর


271

কেউ দয়া করে এসকিউএলে নিম্নলিখিত আচরণ ব্যাখ্যা করতে পারেন?

SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)

উত্তর:


308

<>স্ট্যান্ডার্ড এসকিউএল -২২; !=এর সমতুল্য উভয়ই মূল্যবোধের জন্য মূল্যায়ন করে, যা NULLনয় - NULLকোনও স্থানের ধারক বলতে মানটির অভাব রয়েছে।

যে কারণে আপনি কেবল এ জাতীয় পরিস্থিতিতে পূর্বাভাস হিসাবে IS NULL/ ব্যবহার করতে পারেন IS NOT NULL

এই আচরণটি এসকিউএল সার্ভারের সাথে সুনির্দিষ্ট নয়। সমস্ত মান অনুসারে এসকিউএল ডায়ালেক্ট একইভাবে কাজ করে।

দ্রষ্টব্য : আপনার মানটি শূন্য না হলে তুলনা করতে আপনি ব্যবহার করেন IS NOT NULL, নাল মান না দিয়ে তুলনা করার জন্য আপনি ব্যবহার করেন <> 'YOUR_VALUE'। আমার মানটি যদি নুলের সমান হয় বা না হয় তবে আমি বলতে পারি না, তবে আমি বলতে পারি যে আমার মানটি ন্যূন বা নাল নয় কিনা। আমার মান যদি NUL ব্যতীত অন্য কিছু হয় তবে আমি তুলনা করতে পারি।


4
প্রকৃতপক্ষে, আমি বিশ্বাস করি <>যে এটি ৯২ টি অনুচ্ছেদে রয়েছে তবে বেশিরভাগ বিক্রেতারা সমর্থন করেন !=এবং / অথবা এটি পরবর্তী বা পরে 99 বা 03 এর মতো নির্দিষ্ট বৈশিষ্ট্যের মধ্যে অন্তর্ভুক্ত রয়েছে
থমাস

2
@ থমাস: ওরাকল !=understand 9i অবধি সমর্থন করল না যতক্ষণ আমি বুঝতে পেরেছি, যা প্রচুর এএনএসআই -২৯ সিনট্যাক্স নিয়ে এসেছিল। আমার বিশ্বাস মাইএসকিউএল একই, একই সাথে 4.x সমর্থন শুরু করে
ওএমজি পনিজ

এটি সম্ভবত !=পরবর্তী বিকল্প হিসাবে বিকল্প হিসাবে অন্তর্ভুক্ত করা হতে পারে যে প্রস্তাব সম্ভবত বলে মনে হচ্ছে <>। নতুন চশমাগুলিতে আমার হাত নেই যাতে আমি নিশ্চিত করে বলতে পারি না।
টমাস

2
ফলাফল WHERE MyColumn != NULLবা WHERE MyColumn = NULLনির্বিচারবাদী? বা অন্য কথায়, এটি কি সর্বদা 0 টি সারি ফেরত দেওয়ার গ্যারান্টিযুক্ত, MyColumnডাটাবেসে অণাময় কিনা তা বিবেচনাধীন?
স্লুমা

11
এটিও লক্ষ করা উচিত যেহেতু !=শুধুমাত্র মানগুলির জন্য মূল্যায়ন করে, এর মতো কিছু করা WHERE MyColumn != 'somevalue'NULL রেকর্ডগুলি ফিরিয়ে দেয় না।
পুরো

88

NULL এর কোনও মূল্য নেই এবং তাই স্কেলার মান অপারেটরগুলি ব্যবহার করে তুলনা করা যায় না।

অন্য কথায়, কোনও মানই কখনই NULL এর সমান (বা সমান নয়) হতে পারে না কারণ NULL এর কোনও মূল্য থাকে না।

অতএব, এসকিউএল এর একটি বিশেষ নাল রয়েছে এবং এটি নুলকে মোকাবেলার জন্য পূর্বাভাস দেয় না।


3
+1 টি। এবং, ওপি স্টেটমেন্টের বিপরীতে এটি "মাইক্রোসফ্ট এসকিউএল" নয়। ট্রাইনারি যুক্তি এসকিউএল স্ট্যান্ডার্ড এবং এমএস এ সংজ্ঞায়িত করা হয়েছে এই বিন্দুতে মানকে মেনে চলে।
টমটম

6
আমি প্রস্তাব দিইনি যে এটি কেবল মাইক্রোসফ্টের আচরণ। আমি কেবল জানিয়েছিলাম যে আমি এটি মাইক্রোসফ্ট এসকিউএল সার্ভারে পর্যবেক্ষণ করেছি।
ম্যাক্সিম গের্স্কোভিচ

13
আগ্রহের বাইরে, এমন কোনও পরিস্থিতি রয়েছে যেখানে এই (প্রত্যাশিত) ব্যবহারটি কার্যকর? এটি কেবল আমার কাছে মনে হয় না যে 'a' != nullকোনও মান ( true/ 1) প্রত্যাবর্তন করা স্বজ্ঞাত নয় এবং সময়ে সময়ে আমাকে ধরে ফেলছে! আমি ভাবতাম "কোন মানের তুলনায় কিছু মান" সর্বদা "সমান নয়", তবে সম্ভবত এটিই কেবল আমার?!?!
দার্থপ্যাবলো

1
আমি মনে করি এটি আকর্ষণীয় যে লোকেরা NULL কে ' কোনও মূল্যহীন ' হিসাবে বর্ণনা করে । অনুরূপ, তারপরে, 1 নম্বরটি বলতে আসলে 'একটি মান থাকে' যখন এটি আসলে একটি মান হয়। তবে NULL
অমূল্যের

ম্যানুয়াল ওয়ার্কআরাউন্ড হিসাবে, আপনি সাধারণত SELECT * FROM MyTable WHERE coalesce(MyColumn, 'x') <> 'x'একটি ধ্রুবক নির্ধারণ করতে পারেন যদি এটি নুওল মান হয় তবে আপনি সেন্ডিনেল মান x (এই ক্ষেত্রে একটি স্ট্রিং / চর) এর জন্য একটি উপযুক্ত ডেটাটাইপ সরবরাহ করে। এটি টিএসকিউএল সিনট্যাক্স তবে ওরাকল এবং অন্যান্য ইঞ্জিনগুলির একই বৈশিষ্ট্য রয়েছে।
সিস্টেমেডডিক্ট

26

মনে রাখবেন যে এই আচরণটি ডিফল্ট (এএনএসআই) আচরণ।

আপনি যদি:

 SET ANSI_NULLS OFF

http://msdn.microsoft.com/en-us/library/ms188048.aspx

আপনি বিভিন্ন ফলাফল পাবেন।

SET ANSI_NULLS OFF স্পষ্টতই ভবিষ্যতে দূরে চলে যাবে ...


8
+1 ... শীঘ্রই যথেষ্ট নয়। এখন আমি কখন একটি সূচীতে "নকল" NULL পেতে পারি? :(

আপনি একটি এসকিউএল সার্ভার সূচকগুলিতে একটি ফিল্টারড সূচক (যেমন create unique index UK_MyTable on MyTable (Column) where Column is not null): যেখানে একটি এসএমএল সার্ভার সূচীতে ডুপ্লিকেট পেতে পারেন : এমএসডিএন.মাইক্রোসফটি.এইন
অ্যান্টনি মিলস

3
দস্তাবেজগুলি থেকে নোট করুন: কখন SET ANSI_NULLSবন্ধ থাকে, সমান (=) এবং সমান নয় (<>) তুলনা অপারেটরগুলি আইএসও মান অনুসরণ করে না। একটি নির্বাচনী বিবৃতি ব্যবহার WHERE column_name = NULLকরে যা কলাম_নামে নাল মানযুক্ত সারিগুলি প্রদান করে। একটি নির্বাচনী বিবৃতি যা WHERE column_name <> NULLকলামে ননাল মান রয়েছে এমন সারিগুলি প্রদান করে। এছাড়াও, একটি নির্বাচনী বিবৃতি যা WHERE column_name <> XYZ_valueXYZ_value নয় এবং NULL নয় এমন সমস্ত সারি প্রদান করে। আইএমএইচও, ফলাফল থেকে নালকে বাদ দেওয়াতে এই শেষ বিবৃতিটি কিছুটা অদ্ভুত বলে মনে হচ্ছে!
দার্থপ্যাবলো

4
এমএসডিএন ডকুমেন্টের গুরুত্বপূর্ণ নোট : এসকিউএল সার্ভারের একটি ভবিষ্যতের সংস্করণে [২০১৪ এর চেয়েও নতুন], এএনএসআই_এনএলএলএস সর্বদা চালু থাকবে এবং যে অ্যাপ্লিকেশনগুলি স্পষ্টভাবে অফে অফ করা আছে এটি একটি ত্রুটি তৈরি করবে। নতুন উন্নয়ন কাজে এই বৈশিষ্ট্যটি ব্যবহার করা এড়িয়ে চলুন এবং বর্তমানে এই বৈশিষ্ট্যটি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলিকে সংশোধন করার পরিকল্পনা করুন।
Otiel

7

এসকিউএল-তে, আপনি যে কোনও কিছুকে মূল্যায়ন / NULLফলাফলগুলি অংকন-এ গণনা করে

এই কারণেই SELECT * FROM MyTable WHERE MyColumn != NULLবা SELECT * FROM MyTable WHERE MyColumn <> NULLআপনাকে 0 টি ফলাফল দেয়।

NULLমানগুলির জন্য একটি চেক সরবরাহ করতে , isNull ফাংশন সরবরাহ করা হয়।

ISতৃতীয় কোয়েরিতে আপনি যেমনটি ব্যবহার করেছিলেন তেমনি আপনি অপারেটরটিও ব্যবহার করতে পারেন ।

আশাকরি এটা সাহায্য করবে.


"এসকিউএল-তে, আপনি যে কোনও কিছুই নুল ফলাফলের সাথে মূল্যায়ন / গণনা করে ফলাফলগুলিকে 'নুল'" - এ ভুল করে। আপনি যে ফলাফলটি বোঝাতে চেয়েছেন তা অজানা।
onedaywhen

@ মহেন্দ্রলিয়া is the নাল ফাংশন NULLS পরীক্ষা করার জন্য সরবরাহ করা হয় না, তবে এটি " নির্দিষ্ট প্রতিস্থাপনের মান দিয়ে NULL প্রতিস্থাপন করে। " আপনার ISNULL এর পরিবর্তে IS NULL বা NULL হয় না যা আলাদা জিনিস।
বিপরীত প্রকৌশলী

7

নুলের একমাত্র পরীক্ষা হ'ল নাল বা নুল নয়। সমতার জন্য পরীক্ষা করা অযৌক্তিক কারণ সংজ্ঞা অনুসারে কেউ জানে না মান কী।

এখানে পড়ার জন্য একটি উইকিপিডিয়া নিবন্ধ:

https://en.wikipedia.org/wiki/Null_(SQL)


6

আমরা ব্যাবহার করি

SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';

মাই কলামটি নুল বা যেখানে সমস্ত সারি যেখানে মাই কলামটি খালি স্ট্রিং রয়েছে সেখানে সারি ফেরাতে। অনেক "শেষ ব্যবহারকারীর" কাছে, NULL বনাম খালি স্ট্রিং ইস্যুটি প্রয়োজন এবং বিভ্রান্তির বিন্দু ছাড়াই একটি পার্থক্য।


5

নালগুলি অন্যান্য মান বা অন্যান্য নালগুলির সাথে তুলনীয় না করার জন্য আমি কেবল কার্যকরী এবং বিজোড় কারণটি দেখতে পাচ্ছি না, কারণ আমরা এটি পরিষ্কারভাবে তুলনা করতে পারি এবং বলতে পারি যে তারা আমাদের প্রসঙ্গে নয় বা একই same এটা মজার. কিছু যুক্তিসঙ্গত সিদ্ধান্ত এবং ধারাবাহিকতার কারণে আমাদের এটির সাথে ক্রমাগত বিরক্ত হওয়া প্রয়োজন। এটি কার্যকরী নয়, এটিকে আরও কার্যক্ষম করে তুলুন এবং এটি দার্শনিক এবং বিজ্ঞানীদের কাছে রেখে দিন যদি এটি সামঞ্জস্যপূর্ণ হয় বা না এবং এটিতে "সর্বজনীন যুক্তি" রয়েছে কিনা তা উপসংহারে ছেড়ে দিন। :) কেউ বলতে পারেন যে এটি সূচী বা অন্য কোনও কারণে, আমি সন্দেহ করি যে এই জিনিসগুলি নালকে মান হিসাবে সমর্থন করতে পারে না। এটি দুটি খালি গ্লাসের সাথে তুলনা করার মতো, একটি হ'ল লতা গ্লাস এবং অন্যটি বিয়ার গ্লাস, আমরা বস্তুর প্রকারের সাথে তুলনা করছি না তবে সেগুলির সাথে মূল্যবোধগুলি তুলনা করছি, যেমন আপনি ইন্টি এবং বর্ণের সাথে তুলনা করতে পারেন, এটি নাল সাথে ' এমনকি আরও সহজ, এটি কিছুই নয় এবং দুটি দুজনের মধ্যে যা মিল আছে তা একই, আমার দ্বারা এবং স্প্যাকাল লেখার প্রত্যেকের দ্বারা পরিষ্কারভাবে তুলনাযোগ্য, কারণ আমরা কিছু এএনএসআই মানের কারণে অদ্ভুত উপায়ে তাদের তুলনা করে সেই যুক্তিটি অবিচ্ছিন্নভাবে ভেঙে দিচ্ছি। আমাদের জন্য এটি করার জন্য কম্পিউটার শক্তি কেন ব্যবহার করবেন না এবং আমি সন্দেহ করি যে সম্পর্কিত সমস্ত কিছু যদি এই বিষয়টি মাথায় রেখে নির্মিত হয় তবে এটি জিনিসগুলিকে ধীর করে দেবে। "এটি নাল এটি কিছুই নয়", এটি অ্যাপল নয় এটি অ্যাপল, আসুন ... কার্যত আপনার বন্ধু এবং এখানে যুক্তিও রয়েছে। শেষ অবধি কেবলমাত্র জিনিসটি কার্যকারিতা এবং সেভাবে নাল ব্যবহার করা কম বা বেশি কার্যকারিতা এবং ব্যবহারের সহজতা এনে দেয়। এটি আরও দরকারী? কারণ আমরা কিছু যুক্তিসঙ্গতভাবে এএনএসআই মানের কারণে অদ্ভুত উপায়ে তাদের তুলনা করে সেই যুক্তিটি অবিচ্ছিন্নভাবে ভাঙছি। আমাদের জন্য এটি করার জন্য কম্পিউটার শক্তি কেন ব্যবহার করবেন না এবং আমি সন্দেহ করি যে সম্পর্কিত সমস্ত কিছু যদি এই বিষয়টি মাথায় রেখে নির্মিত হয় তবে এটি জিনিসগুলিকে ধীর করে দেবে। "এটি নাল এটি কিছুই নয়", এটি অ্যাপল নয় এটি অ্যাপল, আসুন ... কার্যত আপনার বন্ধু এবং এখানে যুক্তিও রয়েছে। শেষ অবধি কেবলমাত্র জিনিসটি কার্যকারিতা এবং সেভাবে নাল ব্যবহার করা কম বা বেশি কার্যকারিতা এবং ব্যবহারের সহজতা এনে দেয়। এটি আরও দরকারী? কারণ আমরা কিছু যুক্তিসঙ্গতভাবে এএনএসআই মানের কারণে অদ্ভুত উপায়ে তাদের তুলনা করে সেই যুক্তিটি অবিচ্ছিন্নভাবে ভাঙছি। আমাদের জন্য এটি করার জন্য কম্পিউটার শক্তি কেন ব্যবহার করবেন না এবং আমি সন্দেহ করি যে সম্পর্কিত সমস্ত কিছু যদি এই বিষয়টি মাথায় রেখে নির্মিত হয় তবে এটি জিনিসগুলিকে ধীর করে দেবে। "এটি নাল এটি কিছুই নয়", এটি অ্যাপল নয় এটি অ্যাপল, আসুন ... কার্যত আপনার বন্ধু এবং এখানে যুক্তিও রয়েছে। শেষ অবধি কেবলমাত্র জিনিসটি কার্যকারিতা এবং সেভাবে নাল ব্যবহার করা কম বা বেশি কার্যকারিতা এবং ব্যবহারের সহজতা এনে দেয়। এটি আরও দরকারী? এটি আপেল নয় এটি অ্যাপল, আসুন ... কার্যত আপনার বন্ধু এবং এখানে যুক্তিও রয়েছে। শেষ অবধি কেবলমাত্র জিনিসটি কার্যকারিতা এবং সেভাবে নাল ব্যবহার করা কম বা বেশি কার্যকারিতা এবং ব্যবহারের সহজতা এনে দেয়। এটি আরও দরকারী? এটি আপেল নয় এটি অ্যাপল, আসুন ... কার্যত আপনার বন্ধু এবং এখানে যুক্তিও রয়েছে। শেষ অবধি কেবলমাত্র জিনিসটি কার্যকারিতা এবং সেভাবে নাল ব্যবহার করা কম বা বেশি কার্যকারিতা এবং ব্যবহারের সহজতা এনে দেয়। এটি আরও দরকারী?

এই কোডটি বিবেচনা করুন:

SELECT CASE WHEN NOT (1 = null or (1 is null and null is null)) THEN 1 ELSE 0 end

আপনার মধ্যে কতজন জানেন যে এই কোডটি কী ফিরিয়ে দেবে? সাথে বা না ছাড়াই এটি 0 ফিরে আসে me আমার কাছে এটি কার্যকরী নয় এবং এটি বিভ্রান্তিকর। সি # তে এটি যেমনটি হওয়া উচিত তেমনি তুলনা ক্রিয়াকলাপের মান ফিরে আসে, যৌক্তিকভাবে এটিও মান দেয়, কারণ যদি এটি না থাকে তবে তুলনা করার মতো কিছুই নেই (ছাড়া। কিছুই নয় :))। তারা কেবল "বলেছে": নাল "রিটার্ন" 0 এর সাথে তুলনা করে যে কোনও কিছুই 0 এবং এটি অনেকগুলি কাজ এবং মাথাব্যথা তৈরি করে।

এই কোডটি আমাকে এখানে এনেছে:

where a != b OR (a is null and b IS not null) OR (a IS not null and b IS null)

আমার কেবল তুলনা করতে হবে যদি দুটি ক্ষেত্রের (যেখানে) আলাদা মান থাকে তবে আমি ফাংশনটি ব্যবহার করতে পারি, তবে ...


4

তুলনা অপারেটরগুলি ব্যবহার করে কোনও মানের সাথে তুলনা করা যায় না UL নুল = নুল মিথ্যা। নাল একটি মান নয়। আইএস অপারেটরটি বিশেষত NULL তুলনাগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে is


5
আমি সবসময় বিভ্রান্ত লোকদের উপভোগ করেছি যখন আমি কখনও কখনও এমন কিছু ব্যবহার করি null = nullযেখানে কেউ 1=0কিছু অ্যাডহক কোয়েরিতে ব্যবহার করতে পারে । আর যদি তারা নালিশ, আমি এটিকে পরিবর্তন করতে null != null:)
SWeko

8
"নুল = নুল মিথ্যা" এটি ঠিক নয়। NULL = NULL অজানা এবং মিথ্যা নয় বলে মূল্যায়ন করে ।
এনভিজেল

@ ডিপোর্টাস যা তাই তবে আমার অর্থ ছিল যে শর্তাধীন এটি সত্য হিসাবে মূল্যায়ন করা হবে না।
ভিনসেন্ট রামধনি

@ ভিনসেন্ট রামধনী মিথ্যা হিসাবেও নয়; প্রকৃতপক্ষে, পোস্টগ্রিজগুলিতে এটি NULL
পেরে

2

পুরানো প্রশ্ন, তবে নিম্নলিখিতগুলি আরও কিছু বিশদ সরবরাহ করতে পারে।

nullকোনও মান বা অজানা মান উপস্থাপন করে। এটি নির্দিষ্ট করে না কেন কেন কোনও মূল্য নেই, যা কিছুটা অস্পষ্টতার দিকে নিয়ে যেতে পারে।

মনে করুন আপনি এই জাতীয় একটি ক্যোয়ারী চালাচ্ছেন:

SELECT *
FROM orders
WHERE delivered=ordered;

এটি হল, আপনি সারিগুলি সন্ধান করছেন যেখানে তারিখ orderedএবং deliveredতারিখগুলি একই।

যখন একটি বা উভয় কলাম শূন্য থাকে তখন কী আশা করা যায়?

যেহেতু কমপক্ষে তারিখগুলির একটি অজানা, আপনি এটি আশা করতে পারবেন না যে 2 তারিখগুলি একই। উভয় তারিখ অজানা যখন এটির ক্ষেত্রেও রয়েছে : আমরা যদি সেগুলি না জানি তবে কীভাবে তারা একই হতে পারে?

এই কারণে, কোনও nullমান হিসাবে চিকিত্সা করা ব্যর্থ হতে হবে। এই ক্ষেত্রে, এটি মেলে না। আপনি নিম্নলিখিতটি চেষ্টা করে থাকলে এটিও এই ক্ষেত্রে:

SELECT *
FROM orders
WHERE delivered<>ordered;

আবার আমরা কীভাবে বলতে পারি যে দুটি মান একই নয় তবে সেগুলি কী তা আমরা জানি না।

এসকিউএল এর অনুপস্থিত মানগুলির জন্য একটি নির্দিষ্ট পরীক্ষা রয়েছে:

IS NULL

বিশেষত এটি মানগুলির তুলনা করে না , বরং এটি অনুপস্থিত মানগুলির সন্ধান করে।

অবশেষে, !=অপারেটর হিসাবে, যতদূর আমি সচেতন, এটি আসলে কোনও মানদণ্ডে নয়, তবে এটি খুব ব্যাপকভাবে সমর্থিত। কিছু ভাষা থেকে প্রোগ্রামারদের বাড়িতে আরও বেশি বোধ করার জন্য এটি যুক্ত করা হয়েছিল। সত্যই, কোনও প্রোগ্রামার যদি তারা কোন ভাষাটি ব্যবহার করছেন তা মনে রাখতে সমস্যা হয় তবে তারা খারাপ শুরু করে to


এটি একই "অযৌক্তিক" "যুক্তি" যা @How তার উত্তরে বর্ণনা করছে। সত্যটি এই যে, এই প্রসঙ্গে সেই অতিরিক্ত পরাশক্তিটির প্রয়োজন নেই; এটি সহজেই অনুমান করা যায় যে যখন আমরা কোনও কিছুর NULLসাথে কোনও তুলনা করি তখন এর অর্থ আমরা একটি NULLমানকে ' একটি মান থাকার' সাথে তুলনা করছি , মানটিকে "নির্ধারিত মানটির সাথে" নির্ধারিত মানটির সাথে নয় " NULLতবে আমরা জানি না ", যা স্পষ্টতই আমরা কখনও জানতে সক্ষম হব না। এটি সত্যিই জিনিসগুলিকে সহজ করবে।
পেরে

@ পেয়ার আমি বলব না যে এটি কঠোরভাবে "অযৌক্তিক", এবং আমি নিশ্চিত নই যে লেখাই IS NULLলেখার চেয়ে অনেক বেশি কঠিন = NULL। আমি মনে করি এটি পরবর্তী ক্ষেত্রে বিশেষ কেস হিসাবে বিবেচনা না করে তার WHERE columnA = columnBমতো ব্যাখ্যা করলে আরও সুসংগত হবে WHERE columnA = NULL। মনে রাখবেন যে NULLহয় না একটি মান। প্রোগ্রামিং ভাষাগুলিতে যেখানে এটি পরীক্ষা করা বৈধ, variable == nullকারণ nullএর আলাদা অর্থ রয়েছে; এটি অজানা কিছু উপস্থাপন করে না, তবে একটি মান ইচ্ছাকৃত পুনরায় সেট করা। এসকিউএল এর সাথে তেমন নয়।
মানঙ্গো

এজন্য আমি এটিকে @ মঙ্গু;) (এবং "লজিক") এর মধ্যে রেখেছি। আমারে পাগল হবেন না; আমি আপনার ব্যাখ্যা সম্পর্কে নয়, এএনএসআই "যুক্তি" সম্পর্কে বলছিলাম। আমি সম্মত হই যে আপনার সর্বশেষ উদাহরণে IS NULLএবং এর =NULLমধ্যে কোনও ওভারহেড নেই । তবে হোভারের শেষটি একবার দেখুন। আমি বারবার এটির অভিজ্ঞতা থেকে ক্লান্ত হয়ে পড়েছি load প্রচুর অযৌক্তিক? অতিরিক্ত চেকিং ...
পেরে

1

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

CREATE FUNCTION [dbo].[ufn_equal_with_nulls]
(
    @i sql_variant,
    @d sql_variant
)
RETURNS bit
AS
BEGIN
    DECLARE @in bit = 0, @dn bit = 0
    if @i is null set @in = 1
    if @d is null set @dn = 1

    if @in <> @dn
        return 0

    if @in = 1 and @dn = 1
        return 1

    if @in = 0 and @dn = 0 and @i = @d
        return 1

    return 0

END

এই ফাংশনটি ব্যবহার করতে, আপনি পারেন

declare @tmp table (a int, b int)
insert into @tmp values
(1,1),
(1,2),
(1,null),
(null,1),
(null,null)

---- in select ----
select *, [dbo].[ufn_equal_with_nulls](a,b) as [=] from @tmp

---- where equal ----
select *,'equal' as [Predicate] from @tmp where  [dbo].[ufn_equal_with_nulls](a,b) = 1

---- where not equal ----
select *,'not equal' as [Predicate] from @tmp where  [dbo].[ufn_equal_with_nulls](a,b) = 0

ফলাফলগুলি হ'ল:

---- in select ----
a   b   =
1   1   1
1   2   0
1   NULL    0
NULL    1   0
NULL    NULL    1

---- where equal ----
1   1   equal
NULL    NULL    equal

---- where not equal ----
1   2   not equal
1   NULL    not equal
NULL    1   not equal

Sql_variant এর ব্যবহার এটিকে বিভিন্ন ধরণের জন্য উপযুক্ত করে তোলে


0

নুল কিছুই নয় ... এটি অজানা। NULL কোন কিছুর সমান হয় না। এজন্য আপনাকে আপনার এসকিউএল কোয়েরিতে = NULL এর পরিবর্তে IS NULL ম্যাজিক শব্দটি ব্যবহার করতে হবে

আপনি এটি উল্লেখ করতে পারেন: http://weblogs.sqlteam.com/markc/archive/2009/06/08/60929.aspx

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