Cara menggunakan NULL atau string kosong di SQL

129

Saya ingin tahu cara menggunakan NULL dan string kosong pada saat yang sama dalam WHEREklausa di SQL Server. Saya perlu menemukan catatan yang memiliki nilai nol atau string kosong. Terima kasih.

poshan
sumber
5
Ada kata kunci ATAU di SQL.
Robert Harvey
13
Pertanyaan ini tidak menunjukkan upaya penelitian apa pun. Penting untuk melakukan pekerjaan rumah Anda . Beri tahu kami apa yang Anda temukan dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling penting itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Faq .
Kermit
1
kemungkinan duplikat dari Bagaimana memilih data dari tabel MySQL di mana sebuah kolom NULL (ini adalah pertanyaan MySQL, tetapi pada dasarnya jawaban yang sama untuk t-sql)
Michael Berkowski

Jawaban:

234
Select *
From Table
Where (col is null or col = '')

Atau

Select *
From Table
Where IsNull(col, '') = ''
pembuat kode
sumber
14
menurut jawaban @Bradc dalam stackoverflow.com/questions/799584/… ini , lebih baik menggunakan pendekatan pertama.
Sameera R.
27

Anda bisa melakukan ini:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''
Praveen Nambiar
sumber
25

Jika Anda membutuhkannya di bagian SELECT dapat menggunakan seperti ini.

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

Anda dapat mengganti nulldengan nilai substitusi Anda.

Sameera R.
sumber
1
NVL Oracle (var1, 'value') akan menangani penggantian string kosong. Isnull T-SQL (var1, 'value') tidak.
Jenna Leaf
15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''
John Woo
sumber
2
SELECT * FROM TableName WHERE columnNAme ADALAH NULL ATAU RTRIM (columnName) = ''
Xavier John
2
Seperti yang ditunjukkan Xavier, tidak perlu melakukan KEDUA ltrimdan rtrimjika tujuannya hanya untuk membandingkan dengan string kosong. ALASAN: jika ada HANYA spasi putih, satu trim akan menghapus semua itu. Misalnya, Anda tidak peduli apakah perbandingannya gagal karena yang tersisa adalah "abc" atau "abc".
ToolmakerSteve
8

Untuk menemukan baris di mana col berada NULL, string kosong atau spasi kosong (spasi, tab):

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

Untuk menemukan baris di mana col berada NOT NULL, string kosong atau spasi kosong (spasi, tab):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Scott Sterling
sumber
7

Beberapa metode berharga ...

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);

Dan beberapa yang tidak berharga ...

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

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

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';
Martin Smith
sumber
3

Ini MSSQL yang jelek:

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

solusi terbaik saya:

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

COALESCE mengembalikan exp non-null pertama dalam daftar ekspresi ().

jika fieldValue adalah null atau string kosong maka: kami akan mengembalikan elemen kedua lalu 0.

jadi 0 sama dengan 0 maka nilai bidang ini adalah string nol atau kosong.

dalam python untuk contoh:

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

semoga berhasil

Anouar Mokhtari
sumber
2

youe cek null Dengan IS NULL dan string Empty With LEN (RTRIM (LTRIM (Column)))) = 0 in

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL
Alireza Shabani
sumber
2
select 
   isnull(column,'') column, * 
from Table  
Where column = ''
chandu komati
sumber
1
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0
Charaf JRA
sumber
1

Anda bisa menggunakan isnullfungsi untuk mendapatkan keduanya nulldan mengosongkan nilai bidang teks:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''
Alberto De Caro
sumber
Fungsi isnull secara harfiah hanya memeriksa apakah nilainya nol. Ini tidak akan berfungsi jika string kosong ("").
Max Pringle
@Max Pringle. Saya tidak menyatakan secara berbeda. Kode yang disediakan juga menjawab permintaan pertanyaan. Tidak yakin dengan kontribusi Anda. Sarankan hasil edit alih-alih downvoting.
Alberto De Caro
akan menerima saran Anda. Saya memasukkan edit yang disarankan sekarang. Ini di mana klausa hanya mendapatkan nilai nol bukan nilai string kosong. Nullif dapat digunakan untuk mendapatkan nilai kosong.
Max Pringle
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

Anda dapat memeriksa ''seperti NULLdengan mengubahnya menjadi NULLmenggunakanNULLIF

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

atau Anda dapat memeriksa NULLsebagai ''menggunakanSELECT 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
BTE
sumber
1

Dalam sproc, Anda dapat menggunakan kondisi berikut:

DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'
mohammed hussamuddin hussamudd
sumber
1

oleh fungsi ini:

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

dan gunakan ini:

dbo.isnull (nilai, 0)

Mohsen. Sharify
sumber
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()
Vinicius.Beloni
sumber