Подтвердить что ты не робот

Поле проверки, если пусто

Правильно ли запрос, если я хочу проверить, имеют ли поле другие символы, отличные от нуля и пустые?

select CASE WHEN description IS NULL THEN 'null'
  WHEN description IS NOT NULL THEN 'not null' ELSE 'something else' END 
  AS 'description'from milestone where name like '%Test%' or name like '%test%';

+-------------+
| description |
+-------------+
| not null    |
+-------------+
1 row in set (0.00 sec)
4b9b3361

Ответ 1

Null и empty означает NULL + '' (пустая строка)?

select CASE WHEN description IS NULL or description = '' THEN 'null or empty'
  ELSE 'not null' END 
  AS 'description'

В исходном запросе нет возможности третьего случая, потому что IS NULL и IS NOT NULL являются взаимодополняющими, между ними они охватывают все возможности.

Кроме того, если вы не используете сортировку с учетом регистра (очень редко и никогда по умолчанию, если вы специально не назначаете ее), MySQL не является Oracle - эти два запроса будут работать одинаково:

where name like '%Test%' or name like '%test%'
where name like '%test%'

Поскольку MySQL будет соответствовать строкам без учета регистра

Ответ 2

Простое решение IF:

IF (my_field = '', "not null", "null")

Кстати, мне лично нравится использовать его (сокращенный синтаксис):

IF (my_field = '', 1, 0)

Ответ 3

Возможно, вы можете попробовать что-то вроде этого:

select IF(LENGTH(description) > 0,'not null', 'null or empty') from milestone

Ответ 4

Вы также можете попробовать использовать REGEXP:

// 0 is considered empty
WHERE `field` [NOT] REGEXP '[^0]'

// 0 is not considered empty
WHERE `field` [NOT] REGEXP '[^.]'

Ответ 5

Я бы создал "сохраненную функцию" (что в MSSQL называется пользовательской функцией):

CREATE FUNCTION isNullOrSpaces(s TEXT)
RETURNS BOOLEAN DETERMINISTIC
RETURN (IFNULL(LENGTH(TRIM(s)), 0) = 0);

select 
    isNullOrSpaces(null) 'null', 
    isNullOrSpaces('') 'empty string', 
    isNullOrSpaces('   ') 'spaces',
    isNullOrSpaces('  
        ') 'spaces, tab and newline';

Обратите внимание, что последний случай - когда значение содержит вкладки и новые строки - возвращает 0 (FALSE). Это связано с плохой реализацией (IMHO) встроенной функции TRIM, которая не удаляет все пробелы.

Я бы предпочел сделать функцию isNullOrWhiteSpace, но так как это достаточно хорошо для многих случаев, и реализация корректного TRIM-функции с чистым SQL-кодом будет медленной, я решил, что это будет сделано. Если вам нужно обрабатывать все пробелы, подумайте над тем, как MySQL называет пользовательскую функцию (нативная функция - это более лучшее имя IMO) - см., Например, https://www.codeproject.com/articles/15643/mysql-user-defined-functions.

Вы также можете создать версию, которая возвращает пустую строку, если аргумент NULL, пустой или пробел. Эта версия в основном полезна для предложений WHERE или HAVING запроса, но единственная сложная часть создания одной из них, которая работает одинаково, за исключением того, что возвращает пустую строку или исходную строку, следует правильно назвать функцию.! Что-то вроде этого:

CREATE FUNCTION trimEx(s TEXT)
RETURNS TEXT DETERMINISTIC
RETURN IF(IFNULL(LENGTH(TRIM(s)), 0) = 0, '', TRIM(s));

select 
    trimEx(null) 'null',    
    trimEx('') 'empty string',  
    trimEx('   ') 'spaces', 
    trimEx('  not empty  ') 'contains text';

Ответ 6

// checks if the field not null
where field_name !=' '