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.


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:



27

Anda bisa melakukan ini:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''

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.


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)) = ''

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)),'')<>''

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,'') = '';

3

Ini MSSQL yang jelek:

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

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


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


1
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0

1

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

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

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

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'

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)


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()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.