Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Не работает DateDiff  [new]
Настаев
Member

Откуда:
Сообщений: 475
Всем привет!
Поставил условие на дату, чтобы получить только свежие. В результат попадают старые. К тому же MySql сам меняет мне функции при сохранении представления. Вот запрос и результат на скрине
SELECT
  `История по наличию`.`код` AS `код`,
  `История по наличию`.`дата` AS `дата`,
  DATE_FORMAT(`История по наличию`.`дата`, '%d/%m/%y') AS `день`,
  TIME_FORMAT(`История по наличию`.`дата`, '%H:%i:%S') AS `время`,
  `История по наличию`.`наименование` AS `наименование`,
  `История по наличию`.`действие` AS `действие`,
  `История по наличию`.`количество` AS `количество`,
  `История по наличию`.`стало` AS `стало`,
  `История по наличию`.`примечание` AS `примечание`,
  `История по наличию`.`документ` AS `документ`
FROM `История по наличию`
WHERE DATEDIFF(`История по наличию`.`дата`,CURDATE())<30
ORDER BY 1 DESC


DbForgeStudio сам меняет условие при сохранении представления
WHERE TO_DAYS(`История по наличию`.`дата`) - TO_DAYS(CURDATE()) < 30


К сообщению приложен файл. Размер - 78Kb
12 окт 19, 20:20    [21992853]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
miksoft
Member

Откуда:
Сообщений: 37837
Настаев,

Покажите полный DDL таблицы.
Скорее всего вы перепутали порядок аргументов в datediff.

Почему заменяется функция - не знаю, но заменяется на эквивалентную конструкцию.

Назвать объекты русскими буквами с пробелами - мина замедленного действия.
12 окт 19, 20:36    [21992871]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
Настаев
Member

Откуда:
Сообщений: 475
miksoft, а что такое DLL таблицы?
Может это...
CREATE
DEFINER = 'mtrx'@'%'
VIEW mtrx.История
AS
SELECT
  `История по наличию`.`код` AS `код`,
  `История по наличию`.`дата` AS `дата`,
  DATE_FORMAT(`История по наличию`.`дата`, '%d/%m/%y') AS `день`,
  TIME_FORMAT(`История по наличию`.`дата`, '%H:%i:%S') AS `время`,
  `История по наличию`.`наименование` AS `наименование`,
  `История по наличию`.`действие` AS `действие`,
  `История по наличию`.`количество` AS `количество`,
  `История по наличию`.`стало` AS `стало`,
  `История по наличию`.`примечание` AS `примечание`,
  `История по наличию`.`документ` AS `документ`
FROM `История по наличию`
WHERE TO_DAYS(`История по наличию`.`дата`) - TO_DAYS(CURRENT_TIMESTAMP()) < 30
ORDER BY 1 DESC;
12 окт 19, 20:37    [21992874]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
Настаев
Member

Откуда:
Сообщений: 475
CREATE TABLE mtrx.`История по наличию` (
  код int(11) NOT NULL AUTO_INCREMENT,
  дата datetime DEFAULT CURRENT_TIMESTAMP(),
  наименование int(11) DEFAULT NULL,
  действие int(11) DEFAULT NULL,
  количество double DEFAULT NULL,
  стало double DEFAULT NULL COMMENT 'наличие в тот момент',
  примечание varchar(255) DEFAULT NULL,
  документ int(11) DEFAULT NULL,
  изм timestamp NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (код)
)
ENGINE = MYISAM,
AUTO_INCREMENT = 205109,
AVG_ROW_LENGTH = 46,
CHARACTER SET utf8mb4,
CHECKSUM = 0,
COLLATE utf8mb4_general_ci;

ALTER TABLE mtrx.`История по наличию`
ADD INDEX `Действия с товаромИстория по наличию` (действие);

ALTER TABLE mtrx.`История по наличию`
ADD INDEX `ТоварыИстория по наличию` (наименование);
12 окт 19, 20:39    [21992877]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
Настаев
Member

Откуда:
Сообщений: 475
Вопрос отпал
Вот так сравнивает нормально
WHERE TO_DAYS(`История по наличию`.`дата`) > TO_DAYS(CURRENT_TIMESTAMP()) - 30

А вот так нет
WHERE TO_DAYS(CURRENT_TIMESTAMP()) - TO_DAYS(`История по наличию`.`дата`) > 30

Странно. Я думал, что от перестановки слагаемых сумма не меняется. А ещё пришлось привести обе даты к одному типу.
MySql с капризами, но слушается :)

Спасибо
12 окт 19, 20:49    [21992890]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
miksoft
Member

Откуда:
Сообщений: 37837
Настаев,

Это неэквивалентная перестановка, вы знаки путаете.
12 окт 19, 21:20    [21992911]     Ответить | Цитировать Сообщить модератору
 Re: Не работает DateDiff  [new]
Настаев
Member

Откуда:
Сообщений: 475
miksoft, точно :)
Перепутал знакки > и <
13 окт 19, 14:35    [21993058]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить