Tôi có một cột trong bảng có thể chứa các giá trị null hoặc rỗng. Làm cách nào để kiểm tra xem một cột trống hay null trong các hàng có trong bảng?
(e.g. null or '' or ' ' or ' ' and ...)
Tôi có một cột trong bảng có thể chứa các giá trị null hoặc rỗng. Làm cách nào để kiểm tra xem một cột trống hay null trong các hàng có trong bảng?
(e.g. null or '' or ' ' or ' ' and ...)
Câu trả lời:
Điều này sẽ chọn tất cả các hàng nơi some_col
là NULL
hay ''
(chuỗi rỗng)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(một khoảng trắng được chèn trong chuỗi) thì nó hoạt động trên cả MySQL và Oracle, xem câu trả lời của "onedaywhen". some_col = ''
không hoạt động trên Oracle vì chuỗi rỗng có nghĩa là NULL ở đó.
' '
, thì nó sẽ không hoạt động trong SQLite. Nó chỉ xử lý khớp chuỗi giống hệt / trực tiếp.
Như được định nghĩa bởi Tiêu chuẩn SQL-92, khi so sánh hai chuỗi có độ rộng khác nhau, giá trị hẹp hơn được đệm bên phải với các khoảng trắng để làm cho nó có cùng chiều rộng với giá trị rộng hơn. Do đó, tất cả các giá trị chuỗi bao gồm toàn bộ khoảng trắng (bao gồm khoảng trắng bằng 0) sẽ được coi là bằng nhau, ví dụ:
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Do đó, điều này sẽ hoạt động bất kể có bao nhiêu khoảng trắng tạo nên some_col
giá trị:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
hoặc ngắn gọn hơn:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(một khoảng trắng được chèn trong chuỗi) sau đó nó hoạt động trên cả MySQL và Oracle. some_col = ''
không hoạt động trên Oracle vì chuỗi rỗng có nghĩa là NULL ở đó và điều kiện hoàn chỉnh trở thành NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
và SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
làm việc cho tôi trong MySQL. Hy vọng điều này sẽ hữu ích.
'' = ' '
hoạt động trong SQLServer nhưng không phải trong SQLite, theo như tôi có thể nói, từ việc kiểm tra nó ngay bây giờ.
Một cách ngắn hơn để viết điều kiện:
WHERE some_col > ''
Kể từ khi null > ''
sản xuất unknown
, điều này có tác dụng lọc cả null
chuỗi và chuỗi rỗng.
coalesce(some_col, '') = ''
Bạn có thể kiểm tra xem một cột có rỗng hay không bằng cách sử dụng WHERE col IS NULL
hoặc WHERE col IS NOT NULL
vd
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Trong ví dụ của bạn, bạn có nhiều hoán vị của khoảng trắng. Bạn có thể loại bỏ khoảng trắng bằng cách sử dụng TRIM
và bạn có thể sử dụng COALESCE
để mặc định giá trị NULL (COALESCE sẽ trả về giá trị không null đầu tiên từ các giá trị bạn cung cấp.
ví dụ
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Truy vấn cuối cùng này sẽ trả về các hàng trong đó MyCol
là null hoặc là bất kỳ độ dài nào của khoảng trắng.
Nếu bạn có thể tránh nó, tốt hơn là không có chức năng trên một cột trong mệnh đề WHERE vì điều đó gây khó khăn khi sử dụng một chỉ mục. Nếu bạn chỉ đơn giản muốn kiểm tra xem một cột là rỗng hay trống, bạn có thể nên làm điều này tốt hơn:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Xem TRIM COALESCE và IS NULL để biết thêm thông tin.
Cũng làm việc với các giá trị null từ các tài liệu MySQL
)
trước =
dấu hiệu trong ví dụ thứ hai của bạn
Một phương pháp khác không có WHERE, hãy thử điều này ..
Sẽ chọn cả hai giá trị rỗng và NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Hoặc
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
hoặc là
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Tôi ghét các lĩnh vực lộn xộn trong cơ sở dữ liệu của tôi. Nếu cột có thể là một chuỗi trống hoặc null, tôi muốn sửa lỗi này trước khi thực hiện chọn mỗi lần, như sau:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Điều này giúp dữ liệu gọn gàng, miễn là bạn không cần phân biệt cụ thể giữa NULL và trống vì một số lý do.
thử
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
hoặc là
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Trong khi kiểm tra null or Empty
giá trị cho một cột trong dự án của tôi, tôi nhận thấy rằng có một số mối quan tâm hỗ trợ trong các Cơ sở dữ liệu khác nhau.
Mọi cơ sở dữ liệu đều không hỗ trợ TRIM
phương pháp.
Dưới đây là ma trận chỉ để hiểu các phương thức được hỗ trợ bởi các cơ sở dữ liệu khác nhau.
Hàm TRIM trong SQL được sử dụng để loại bỏ tiền tố hoặc hậu tố được chỉ định khỏi chuỗi. Mẫu phổ biến nhất đang bị loại bỏ là khoảng trắng. Hàm này được gọi khác nhau trong các cơ sở dữ liệu khác nhau:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Cách kiểm tra sản phẩm nào / không:
Dưới đây là hai cách khác nhau theo Cơ sở dữ liệu khác nhau-
Cú pháp cho các hàm trim này là:
Sử dụng Trim để kiểm tra-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Sử dụng LTRIM & RTRIM để kiểm tra-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Trên cả hai cách đều cung cấp kết quả giống nhau, chỉ sử dụng dựa trên hỗ trợ DataBase của bạn. Nó chỉ trả về FirstName
từ UserDetails
bảng nếu nó trốngLastName
Hy vọng điều này sẽ giúp bạn :)
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Kiểm tra null
$column is null
isnull($column)
Kiểm tra trống
$column != ""
Tuy nhiên, bạn phải luôn đặt KHÔNG NULL cho cột,
tối ưu hóa mysql chỉ có thể xử lý một cấp IS NULL
NULL
các giá trị là một chủ đề khác để thảo luận. Tôi không nghĩ rằng nó phù hợp để đưa ra khuyến nghị mà không cung cấp lý do của bạn.
-1
và ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
và LTRIM
, nhưng không TRIM
?
Trong trường hợp của tôi, không gian được nhập vào cột trong quá trình nhập dữ liệu và mặc dù nó trông giống như một cột trống, chiều dài của nó là 1. Vì vậy, trước hết tôi đã kiểm tra độ dài của cột trông trống bằng cách sử dụng length(column)
truy vấn tìm kiếm này.
CHỌN * TỪ BẢNG WHERE LENGHT (COLUMN) = chiều dài cột cho cột trống
hãy thử điều này nếu kiểu dữ liệu là chuỗi và hàng là null
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
nếu kiểu dữ liệu là int hoặc cột bằng 0 thì hãy thử điều này
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
trả về 1 nếu mycolumn là null.