এসকিউএল এ কীভাবে নুল বা খালি স্ট্রিং ব্যবহার করবেন


129

আমি WHEREএসকিউএল সার্ভারের একটি ধারাতে একই সাথে NULL এবং একটি খালি স্ট্রিং কীভাবে ব্যবহার করতে হয় তা জানতে চাই । আমাকে নাল মান বা একটি খালি স্ট্রিং রয়েছে এমন রেকর্ডগুলি সন্ধান করতে হবে। ধন্যবাদ।


5
এসকিউএলে একটি ওআর কিওয়ার্ড রয়েছে।
রবার্ট হার্ভে

13
এই প্রশ্নটি কোনও গবেষণা প্রচেষ্টা দেখায় না। এটা তোলে গুরুত্বপূর্ণ আপনার বাড়ির কাজ । আপনি কী পেয়েছেন এবং কেন এটি আপনার প্রয়োজনীয়তা পূরণ করে না তা আমাদের বলুন । এটি প্রমাণ করে যে আপনি নিজেকে সাহায্য করার চেষ্টা করার জন্য সময় নিয়েছেন, এটি আমাদের সুস্পষ্ট উত্তরের পুনরাবৃত্তি থেকে বাঁচায় এবং সর্বোপরি এটি আপনাকে আরও নির্দিষ্ট এবং প্রাসঙ্গিক উত্তর পেতে সহায়তা করে। FAQ
কেরমিট

উত্তর:




25

আপনার যদি প্রয়োজন হয় নির্বাচন বিভাগে এটি ব্যবহার করতে পারেন।

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct

আপনি nullআপনার প্রতিস্থাপন মান দিয়ে প্রতিস্থাপন করতে পারেন ।


1
ওরাকল এর এনভিএল (var1, 'মান') খালি স্ট্রিং '' প্রতিস্থাপনের যত্ন নেবে। টি-এসকিউএল এর ইসনুল (ভার 1, 'মান') দেয় না।
জেনা লিফ 21

15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

2
টেবিলের নাম থেকে * নির্বাচন করুন যেখানে কলামের নামটি নল বা আরটিআরআইএম (কলামনাম) = ''
জাভেয়ার জন

2
জ্যাভিয়ার হিসাবে উল্লেখ করেছেন যে, দু'টি করার দরকার নেই ltrimএবং rtrimযদি লক্ষ্যটি কেবল খালি স্ট্রিংয়ের সাথে তুলনা করা হয়। কারণ: যদি কেবলমাত্র শ্বেত স্থান থাকে তবে একটি ট্রিম এটি সমস্ত সরিয়ে ফেলবে। উদাহরণস্বরূপ, তুলনাটি ব্যর্থ হয় কিনা তা আপনি যত্নশীল না কারণ যা অবশিষ্ট রয়েছে তা "এবিসি" বা "এবিসি"।
টুলমেকারস্টেভ

8

কর্ন যেখানে রয়েছে সারিগুলি NULLখালি স্ট্রিং বা হোয়াইটস্পেস (স্পেস, ট্যাব) সন্ধান করতে:

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

কর্ন যেখানে রয়েছে সারিগুলি NOT NULLখালি স্ট্রিং বা হোয়াইটস্পেস (স্পেস, ট্যাব) সন্ধান করতে:

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''

7

কিছু সরগেবল পদ্ধতি ...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

এবং কিছু অ-সরগেবল ...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

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

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';

3

এটি কুৎসিত এমএসএসকিউএল:

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END

3

আমার সেরা সমাধান:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE এক্সপ্রেশন তালিকার প্রথম অ-নাল এক্সপ্রেসকে () প্রদান করে।

যদি ক্ষেত্রের মানটি নাল বা খালি স্ট্রিং থাকে: তবে আমরা দ্বিতীয় উপাদানটি 0 দিয়ে দেব।

সুতরাং 0 0 এর সমান হয় তবে এই ক্ষেত্রের মানটি নাল বা ফাঁকা স্ট্রিং।

উদাহরণস্বরূপ অজগরটিতে:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

শুভকামনা


2

আপনি IS নাল সাথে নাল পরীক্ষা করুন এবং স্ট্রিং খালি দিয়ে লেন (আরটিআরআইএম (এলটিআরআইএম (কলাম)) = 0 ইন

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL



1

আপনি কোনও পাঠ্য ক্ষেত্রে isnullউভয় nullএবং খালি মান পেতে ফাংশনটি ব্যবহার করতে পারেন :

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

Isnull ফাংশনটি আক্ষরিকভাবে পরীক্ষা করে মানটি শূন্য হয় কিনা। স্ট্রিং ফাঁকা থাকলে ("") এটি কাজ করবে না।
ম্যাক্স প্রিংল

@ ম্যাক্স প্রিংল আমি অন্যভাবে বলি না। এছাড়াও প্রদত্ত কোড প্রশ্নের অনুরোধের ঠিকানা। আপনার অবদান সম্পর্কে নিশ্চিত না। ডাউনভোটিংয়ের পরিবর্তে একটি সম্পাদনার পরামর্শ দিন।
আলবার্তো দে কারো

আপনার পরামর্শ নেবে। আমি এখনই একটি প্রস্তাবিত সম্পাদনা রেখেছি। এখানে যেখানে ধারাটি শূন্য স্ট্রিংয়ের মান নয় কেবল নাল মান পায়। শূন্য মানগুলি পেতে একটি নুলিফ ব্যবহার করা যেতে পারে।
ম্যাক্স প্রিংল

1
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

আপনি পরীক্ষা করতে পারেন ''যেমন NULLকরে এটি রূপান্তর NULLব্যবহারNULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

অথবা আপনি ব্যবহার NULLহিসাবে পরীক্ষা করতে পারেন''SELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T


1

এই ফাংশন দ্বারা:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

এবং এটি ব্যবহার করুন:

dbo.isnull (মান, 0)


1
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.