Обработка нулевого поля на PHP
У меня есть стол с именем hr events
где в одной области выводятся данные о том, что определенный работник ушел в декретный отпуск;
На return_date
В поле отображается дата возвращения работника из декретного отпуска.
Если сотрудник еще не вернулся, мы устанавливаем значение по умолчанию, как показано на CREATE
утверждение ниже: CREATE (return_date DATE NOT NULL DEFAULT '0000-00-00',)
;
В этом отчете есть одно последнее поле, в котором должна указываться дата последнего возвращения работника: (c.return_date ,'%d/%m/%Y') AS c_return_date
, Как начинающий SQL, я борюсь с этим: всякий раз, когда у нас есть (default 0000-00-00)
значение, c.return_date
приносит какую-то радостную дату, например: 01.12.1999, но это пустое поле.
Я пытался лечить это с ISNULL(c.return_date, '')
или же ISNULL(c.return_date, 0)
но это просто не работает. В приведенном выше сценарии это последнее поле должно быть пустым или что-то кроме этого "12/01/2009".
Что касается PHP, и именно поэтому я редактирую эту тему, я думаю, что может быть выход из этого путем решения этой проблемы внутри скрипта php:
<?php
$retorno = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
$data = explode('-', $retorno);
echo date("d/m/Y", mktime(0, 0, 0, $data[1], $data[2] + 1, $data[0]));
?>
В настоящее время я пытаюсь выяснить (на самом деле, больше выяснить, как работает этот сценарий), как проверить этот сценарий, в случае такой даты возврата, как 0000-00-00
(что означает, что работник еще не вернулся к своей деятельности), не отображать такого рода результаты, такие как 01.12.1999.
3 ответа
В конце концов, это была проблема с PHP-скриптом.
<?php
$retorno = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
$data = explode('-', $retorn);
echo date("d/m/Y", mktime(0, 0, 0, $date[1], $date[2] + 1, $date[0]));
?>
Мне просто нужно было поставить условное заявление на сценарий выше, чтобы предотвратить c_return_date
от отображения чего-либо в случае a_return_date
это 0000-00-00 Взгляните на предложения if / else:
<?php
if ($row['a_return_date'] != "0000-00-00"){
$return = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
$data = explode('-', $return);
echo date("d/m/Y", mktime(0, 0, 0, $date[1], $date[2] + 1, $date[0]));
} else $row['a_return_date_br'] = "-";
?>
Спасибо вам всем. Надеюсь, это поможет кому-то еще.
Я рекомендую разрешить обнулять ваше поле даты:
CREATE TABLE yourTable (return_date DATE, ...)
Затем позвольте null
семантически означать, что работник еще не вернулся из декретного отпуска. Вы можете использовать COALESCE
заменить это null
значение с некоторой датой по умолчанию:
SELECT COALESCE(return_date, '1999-12-01') AS return_date
FROM yourTable;
Я не думаю, что это случайное свидание. Это просто дата, представленная 0000-00-00
в MySQL.
Я бы использовал NULL:
create table hr_events (return_date date default null);
Таким образом, вы можете запросить список этого:
select * from hr_events where return_date is null;
Чтобы получить все hr_events
строки где return_date
не был установлен.