Cách sử dụng NULL hoặc chuỗi rỗng trong SQL


129

Tôi muốn biết cách sử dụng NULL và một chuỗi rỗng cùng một lúc trong một WHEREmệnh đề trong SQL Server. Tôi cần tìm các bản ghi có giá trị null hoặc chuỗi rỗng. Cảm ơn.


5
Có một từ khóa OR trong SQL.
Robert Harvey

13
Câu hỏi này không cho thấy bất kỳ nỗ lực nghiên cứu. Điều quan trọng là làm bài tập về nhà của bạn . Hãy cho chúng tôi những gì bạn tìm thấy và tại sao nó không đáp ứng nhu cầu của bạn. Điều này chứng tỏ rằng bạn đã dành thời gian để cố gắng tự giúp mình, nó giúp chúng tôi tránh nhắc lại các câu trả lời rõ ràng và hầu hết nó giúp bạn có được câu trả lời cụ thể và phù hợp hơn. Câu hỏi thường gặp .
Kermit

1
có thể trùng lặp Cách chọn dữ liệu từ bảng MySQL trong đó một cột là NULL (đây là câu hỏi của MySQL, nhưng về cơ bản nó là câu trả lời tương tự cho t-sql)
Michael Berkowski

Câu trả lời:



27

Bạn chỉ có thể làm điều này:

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

25

Nếu bạn cần nó trong phần CHỌN có thể sử dụng như thế này.

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

bạn có thể thay thế nullbằng giá trị thay thế của bạn.


1
NVL của Oracle (var1, 'value') sẽ đảm nhiệm việc thay thế chuỗi rỗng ''. Isnull của T-SQL (var1, 'value') thì không.
Lá Jenna

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

2
CHỌN * TỪ Tên bảng WHERE cộtNAme LÀ NULL HOẶC RTRIM (cộtName) = ''
Xavier John

2
Như Xavier chỉ ra, không cần phải thực hiện CẢ ltrimrtrimnếu mục tiêu chỉ đơn thuần là so sánh với chuỗi rỗng. LÝ DO: nếu chỉ có khoảng trắng CHỈ, một phần trang trí duy nhất sẽ loại bỏ tất cả. Ví dụ: bạn không quan tâm liệu việc so sánh thất bại bởi vì phần còn lại là "abc" hay "abc".
ToolmakerSteve

8

Để tìm các hàng có col NULL, chuỗi rỗng hoặc khoảng trắng (dấu cách, tab):

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

Để tìm các hàng có col NOT NULL, chuỗi rỗng hoặc khoảng trắng (dấu cách, tab):

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

7

Một số sargable phương pháp ...

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

Và một số thứ không thể nói được ...

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

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

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

3

Đây là MSSQL xấu xí:

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

3

giải pháp tốt nhất của tôi:

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

COALESCE trả về expr không null đầu tiên trong danh sách biểu thức ().

nếu fieldValue là null hoặc chuỗi rỗng thì: chúng ta sẽ trả về phần tử thứ hai sau đó 0.

vì vậy 0 bằng 0 thì trườngValue này là một chuỗi rỗng hoặc rỗng.

trong python cho mẫu mực:

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

chúc may mắn


2

bạn kiểm tra null Với IS NULL và chuỗi rỗng Với LEN (RTRIM (LTRIM (Cột))) = 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

Bạn có thể sử dụng isnullhàm để lấy cả hai nullvà các giá trị trống của trường văn bản:

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

Hàm isnull theo nghĩa đen chỉ kiểm tra nếu giá trị là null. Nó sẽ không hoạt động nếu chuỗi trống ("").
Max Pringle

@Max Pringle. Tôi không nói khác đi. Ngoài ra mã được cung cấp địa chỉ yêu cầu câu hỏi. Không chắc chắn về sự đóng góp của bạn. Đề nghị chỉnh sửa thay vì downvote.
Alberto De Caro

sẽ lấy lời khuyên của bạn. Tôi đưa vào một chỉnh sửa đề xuất bây giờ. Mệnh đề này chỉ nhận các giá trị null chứ không phải các giá trị chuỗi rỗng. Một nullif có thể được sử dụng để có được các giá trị trống.
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

Bạn có thể kiểm tra ''như NULLbằng cách chuyển đổi nó để NULLsử dụngNULLIF

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

hoặc bạn có thể kiểm tra NULLnhư ''sử dụngSELECT 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

Trong sproc, bạn có thể sử dụng điều kiện sau:

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

1

bởi chức năng này:

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

và sử dụng cái này:

dbo.isnull (giá trị, 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()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.