powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Конкатенация с NULL
23 сообщений из 48, страница 2 из 2
Конкатенация с NULL
    #38499098
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я ж не против. Я о том, что в подавляющем большинстве случаев использования IFNULL()второй параметр - литерал.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38499294
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мне писать запрос через COALESCE ???
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38499339
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALFТак мне писать запрос через COALESCE ???
IFNULL - это формально просто обёртка для COALESCE в случае ровно двух аргументов.
Думай сам. Я в своё время выбрал не-использование IFNULL, и другим советую того же.
Всё, что можно сделать с помощью IFNULL, можно сделать и с помощью COALESCE. Но не наоборот.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38501826
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinabboyRALFТак мне писать запрос через COALESCE ???
IFNULL - это формально просто обёртка для COALESCE в случае ровно двух аргументов.
Думай сам. Я в своё время выбрал не-использование IFNULL, и другим советую того же.
Всё, что можно сделать с помощью IFNULL, можно сделать и с помощью COALESCE. Но не наоборот.

В общем понятно, что ничего не понятно...
Буду писать приложение, которое будет сцеплять строки...
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575227
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем. Возвращаюсь все к тому же товарищи.
Проблема здесь из-за того что данные должны быть равны, поэтому вывод значений идет только при равестве( если есть пустой, то конкатенация не происходит)
Код: sql
1.
CONCAT(MIN(IF(tex.date = '03.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '03.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '03.02',

Умы человечества, подскажите...
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575247
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALFВ общем. Возвращаюсь все к тому же товарищи.
Проблема здесь из-за того что данные должны быть равны, поэтому вывод значений идет только при равестве( если есть пустой, то конкатенация не происходит)
Код: sql
1.
CONCAT(MIN(IF(tex.date = '03.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '03.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '03.02',

Умы человечества, подскажите... как объединять даже если данные не равны
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575617
VFl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALF,

соединение строки и значения NULL всегда дает NULL.

непонятно, зачем у вас вот это

IF(tex.date = '03.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null)

так вы будете всегда получать NULL на всем выражении, если tex.date не '03.02.2014'. Смысл?

если вам нужны данные только за 03.02.2014, можно просто поставить это условие в WHERE.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575878
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFl,
Нет не только за 3 число, такой же запрос на каждые будни февраля месяца, т.е. 4-5...28 число, а как быть если в tex.time есть данные, а в off.time нету ?
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575893
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFlсоединение строки и значения NULL всегда дает NULL.Не всегда. http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat-ws CONCAT_WS() does not skip empty strings. However, it does skip any NULL values after the separator argument.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575898
VFl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALFкак быть если в tex.time есть данные, а в off.time нету ?

IFNULL(TIME_FORMAT(tex.time,'%H:%i'), 'NULL' ), если вы хотите получить результат в виде NULL|02:00 или 02:12|NULL

Тогда NULL будет просто записан строкой.

или сделать IFNULL(TIME_FORMAT(tex.time,'%H:%i'), '' ) если вы хотите получить результат в виде |02:00 или 02:12|
или, например, IFNULL(TIME_FORMAT(tex.time,'%H:%i'), 'пусто' )

Тогда в результате будет пусто|02:00 и 02:12|пусто

Опс, возникнут проблемы с MAX() функциями, если IFNULL() будет подменять время на текст. Я не знаю весь SELECT, который у вас, но если есть группировка, и MAX() сильно нужен, то должно работать и так:

Код: sql
1.
2.
3.
CONCAT(IFNULL(TIME_FORMAT(MAX(tex.time),'%H:%i'), 'NULL'),'|',IFNULL(TIME_FORMAT(MAX(tex.time),'%H:%i'), 'NULL'))
...
WHERE tex.date = '03.02.2014'
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575900
VFl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно, так точнее:
Код: sql
1.
2.
3.
CONCAT(IFNULL(TIME_FORMAT(MIN(tex.time),'%H:%i'), 'NULL'),'|',IFNULL(TIME_FORMAT(MAX(off.time),'%H:%i'), 'NULL'))
...
WHERE tex.date = '03.02.2014'




miksoftVFlсоединение строки и значения NULL всегда дает NULL.Не всегда. http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat-ws CONCAT_WS() does not skip empty strings. However, it does skip any NULL values after the separator argument.

Cоединение строки и значения NULL всегда дает NULL. Это стандарт SQL. NULL в SQL понимается как "не знаю, что там". Если вы к любому значению прибавите "не знаю что", то и получится "не знаю что", т.е. NULL. Функция CONCAT_WS() игнорирует/перепрыгивает значения NULL, а не соединяет их со строкой.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38575908
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFlНаверно, так точнее:
Код: sql
1.
2.
3.
CONCAT(IFNULL(TIME_FORMAT(MIN(tex.time),'%H:%i'), 'NULL'),'|',IFNULL(TIME_FORMAT(MAX(off.time),'%H:%i'), 'NULL'))
...
WHERE tex.date = '03.02.2014'





miksoftпропущено...
Не всегда. пропущено...


Cоединение строки и значения NULL всегда дает NULL. Это стандарт SQL. NULL в SQL понимается как "не знаю, что там". Если вы к любому значению прибавите "не знаю что", то и получится "не знаю что", т.е. NULL. Функция CONCAT_WS() игнорирует/перепрыгивает значения NULL, а не соединяет их со строкой.Кэп, как раз вас нам и не хватало
Я бы всё-таки постарался выяснить, что именно надо ТСу, что он хотел сказать вот этим:
bboyRALFданные должны быть равны, поэтому вывод значений идет только при равестве( если есть пустой, то конкатенация не происходит)Может, ему как раз и надо "перепрыгивание нуллов".
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577414
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, без исходных данных, текста запроса, результата выполнения этого же запроса на этих же данных, и внятного объяснения, почему результат следует считать неправильным, ситуация тупиковая
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577415
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и пожалуйста, не постите скриншоты, только текстом
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577508
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT  user.`name`, 
CONCAT(MIN(IF(tex.date = '03.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '03.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '03.02',
CONCAT(MIN(IF(tex.date = '04.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '04.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '04.02',
CONCAT(MIN(IF(tex.date = '05.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '05.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '05.02',
CONCAT(MIN(IF(tex.date = '06.02.2014',TIME_FORMAT(tex.time,'%H:%i'),null))  ,'|',  MAX(IF(tex.date = '06.02.2014',TIME_FORMAT(off.time,'%H:%i'),null))) as '06.02' 


from tex,user,(select tex.date,tex.userid,tex.comp,tex.time from tex,user where status like '%Завершение%' or (status like '%Блокировка%' and tex.userid=user.id) as off
where tex.`userid`=user.`id` and off.userid=user.id and tex.date=off.date
and (tex.`status` like '%Разблокировка%' or tex.`status` like '%Приветствие%' and tex.time > '04:59')
 and user.name ='Иванова Маша'
group by user.`name` 


набор данных таблица tex
date time comp status03.02.2014 07:09KR Приветствие04.02.2014 07:19KR Приветствие04.02.2014 15:50KR Завершение работы05.02.2014 14:16KR Блокировка (это примерные данные)

из-за таких данных я получу в норм виде только за 4.02, а за 3.02 и за 5.02 я получу просто null

в итоге запрос выдает
name03.0204.0205.02Иванова Машаnull07:19|15:50null, хотя! 3.02 и 5.02 есть зафиксированная информация и мне нужно чтобы он выводил так
name03.0204.0205.02Иванова Маша07:09|null07:19|15:50null|14:16
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577514
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALF, замените в своих конкатах null на 'null'. В принципе это будет код из последнего поста VFI.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577515
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. А что должно выдаваться при отсутствии каких бы то ни было данных за день?
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577516
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, что мешает сделать, не N колонок, а 2N - старт+стоп? И туда выбирать уже труЪ нуллы, если таковые появятся? Зачем это пропихивание нуллов в строки?
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577537
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirИ вообще, что мешает сделать, не N колонок, а 2N - старт+стоп? И туда выбирать уже труЪ нуллы, если таковые появятся? Зачем это пропихивание нуллов в строки? не совсем Вас понял..

По поводу если будут отсутствовать данные за день, то просто null
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577640
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALFне совсем Вас понялВот так нельзя сделать? И не морочить голову с конкатами.
name03.02-start03.02-stop04.02-start04.02-stop05.02-start0.02-stopИванова Маша07:09null07:1915:50null14:16
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577643
bboyRALF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

Да я тоже за такой вид изначально был ) Но руководство понимает лучше меня. )
поэтому без конкатенации ни как..
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38577652
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALF, ну тогда смотри выше, например, последний пост VFI, только туда ещё надо условие добавить, чтобы получилось что-то вроде
Код: sql
1.
if(min(time) is null and max(time) is null, null, весь_тот_конкат)

в общем, то ещё мракобесие получится. Зато "красиво", ага.
...
Рейтинг: 0 / 0
Конкатенация с NULL
    #38578163
VFl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bboyRALF,

вместо
Код: sql
1.
2.
3.
4.
from tex,user,(select tex.date,tex.userid,tex.comp,tex.time from tex,user where status like '%Завершение%' or (status like '%Блокировка%' and tex.userid=user.id) as off
where tex.`userid`=user.`id` and off.userid=user.id and tex.date=off.date
and (tex.`status` like '%Разблокировка%' or tex.`status` like '%Приветствие%' and tex.time > '04:59')
 and user.name ='Иванова Маша'


лучше наверно как то так:
Код: sql
1.
2.
3.
4.
5.
6.
from user LEFT JOIN (tex, tex as off)
ON (tex.`userid`=user.`id` and off.userid=user.id and tex.date=off.date
and (off.`status` like '%Завершение%' or tex.`status` like '%Блокировка%') 
and (tex.`status` like '%Разблокировка%' or tex.`status` like '%Приветствие%') 
and tex.time > '04:59')
WHERE user.name ='Иванова Маша'



потому что если данных по Маше Ивановой для "Завершения" или "Блокировки" по какой то дате нет, то у вас оно и "Разблокировку" с "Приветствием" не покажет. Думается так.

Синтакс надо проверить, писал без проверки
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Конкатенация с NULL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]