У таблиці є стовпець, який може містити нульові або порожні значення. Як перевірити, чи стовпець порожній або нульовий у рядках, наведених у таблиці?
(e.g. null or '' or ' ' or ' ' and ...)
У таблиці є стовпець, який може містити нульові або порожні значення. Як перевірити, чи стовпець порожній або нульовий у рядках, наведених у таблиці?
(e.g. null or '' or ' ' or ' ' and ...)
Відповіді:
Це дозволить вибрати всі рядки, де some_col
є NULL
або ''
(порожній рядок)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(один пробіл, вставлений у рядок), він працює як на MySQL, так і на Oracle, див. Відповідь "onedaywhen". some_col = ''
не працює в Oracle, оскільки порожні рядки означають NULL там.
' '
, вона не працюватиме в SQLite. Він обробляє лише однакове / пряме відповідність рядків.
Як визначено стандартом SQL-92, при порівнянні двох рядків різної ширини, більш вузьке значення розміщене праворуч з пробілами, щоб зробити його такою ж шириною, як і ширше значення. Тому всі рядкові значення, які повністю складаються з пробілів (включаючи нульові пробіли), вважатимуться рівними, наприклад
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Тому це має працювати незалежно від того, скільки пробілів становлять some_col
значення:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
або більш лаконічно:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(один пробіл, вставлений у рядок), тоді він працює як на MySQL, так і на Oracle. some_col = ''
не працює в Oracle, оскільки порожні рядки означають NULL там, а повна умова стає NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
і SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
працювати для мене в MySQL. Сподіваюся, це стане в нагоді.
'' = ' '
працює в SQLServer, але не в SQLite, наскільки я можу сказати, від його тестування зараз.
Коротший спосіб написання умови:
WHERE some_col > ''
Оскільки null > ''
виробляє unknown
, це призводить до фільтрації обох null
та порожніх рядків.
coalesce(some_col, '') = ''
Ви можете перевірити, чи стовпець є нульовим, чи не використовується, WHERE col IS NULL
або, WHERE col IS NOT NULL
наприклад,
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
У вашому прикладі у вас є різні перестановки білого простору. Ви можете позбавити пробілу, використовуючи TRIM
і COALESCE
за замовчуванням використовувати значення NULL (COALESCE поверне перше ненулеве значення зі значень, які ви копіюєте.
напр
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Цей остаточний запит поверне рядки, де MyCol
немає, або будь-яка довжина пробілу.
Якщо ви можете цього уникнути, краще не мати функції на стовпчику в пункті WHERE, оскільки це ускладнює використання індексу. Якщо ви просто хочете перевірити, чи стовпець є нульовим чи порожнім, вам може бути краще зробити це:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Дивіться TRIM COALESCE та IS NULL для отримання додаткової інформації.
Також робота з нульовими значеннями з документів MySQL
)
перед =
знаком у вашому другому прикладі
Ще один метод без ДЕ, спробуйте це ..
Вибере значення «Порожнє» та «NULL»
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Або
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
або
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Я ненавиджу безладні поля у своїх базах даних. Якщо стовпець може бути порожнім рядком або нулем, я б краще виправити це перед тим, як робити вибір кожного разу, як це:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Це зберігає дані в порядку, якщо з певних причин вам не потрібно розмежовувати NULL та порожні.
Перевіряючи null or Empty
значення стовпця в моєму проекті, я помітив, що в різних базах даних є певна проблема підтримки.
Кожна база даних не підтримує TRIM
метод.
Нижче наведена матриця, щоб зрозуміти підтримувані методи різними базами даних.
Функція TRIM в SQL використовується для видалення вказаного префікса або суфікса з рядка. Найбільш поширений візерунок, який видаляється, - це пробіли. Ця функція називається по-різному в різних базах даних:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Як перевірити порожнє / нулеве: -
Нижче наведено два різні способи відповідно до різних баз даних -
Синтаксис цих функцій обрізки:
Використання Trim для перевірки
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Використання LTRIM та RTRIM для перевірки
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Вище вказані обидва способи забезпечують однаковий результат, просто використовуйте на основі підтримки вашої DataBase. Він просто повертає FirstName
з UserDetails
таблиці, якщо у нього порожнійLastName
Сподіваючись, що це допоможе вам :)
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Перевірте на нуль
$column is null
isnull($column)
Перевірте, чи немає порожнього
$column != ""
Однак завжди слід встановлювати NOT NULL для стовпця,
оптимізація mysql може обробляти лише один рівень IS NULL
NULL
цінності - це ще одна ціла тема для обговорення. Я не вважаю за доцільне робити цю рекомендацію, не надаючи ваших міркувань.
-1
і ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
та LTRIM
, але ні TRIM
?
У моєму випадку під час імпорту даних в колонці було введено простір, і хоч це виглядало як порожній стовпець, його довжина становила 1. Отже, перш за все я перевірив довжину порожнього стовпця, що шукає, використовуючи length(column)
потім, виходячи з цього, ми можемо написати пошуковий запит
ВИБІР * З ТАБЛИЦІ, КОЛИ ДЛЯ ДЛЯ ДЛЯ (COLUMN) = довжина стовпця для порожнього стовпця
спробуйте це, якщо тип даних є рядком, а рядок є нульовим
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
якщо тип даних є int або стовпцем 0, то спробуйте це
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
повертає 1, якщо мій стовпець є нульовим.