Версия, подходяща за принтиране
Кликни тук, за да видиш темата в оригиналният и вид
BG Development Форуми > СУБД, SQL програмиране > date_sub in where


Публикувано от: Constantine 23-02-2024, 10:49
Здравейте група,

Опитвам се да пусна една заявка към базата mysql. Версия mysql: 5.7

QUOTE
SELECT
    invoices.id, invoices.pay_date, DATE_SUB(pay_date, INTERVAL 7 DAY) as pay_date_new
FROM
    `invoices`
WHERE pay_date <= DATE_SUB(pay_date, INTERVAL 7 DAY);



Тук идеята е да алармирам клиента предварително седмица (7 дни) за плащане.

Проблема е че не иска да ми извади тези 7 дни.
Резултат = 0 редове


Като задам твърдо pay_date <= "2024-02-16" - резултат има.


Някаква идея ?

С Уважение Константин

Публикувано от: thrawn 23-02-2024, 11:18
Да нямаш проблеми с форматът на датата? Полето pay_date в какъв формат е?

Публикувано от: Constantine 23-02-2024, 11:24
QUOTE (thrawn @ 23-02-2024, 11:18)
Да нямаш проблеми с форматът на датата? Полето pay_date в какъв формат е?

Полето се взима от базата като колонате е с формат date

Пример: 2024-02-02

Публикувано от: thrawn 23-02-2024, 11:27
Ами това
CODE
SELECT
   invoices.id, invoices.pay_date, DATE_SUB(pay_date, INTERVAL 7 DAY) as pay_date_new
FROM
   `invoices`
limit 10

какво връща?

Между другото pay_date <= DATE_SUB(pay_date, INTERVAL 7 DAY); не трябва ли да е pay_date <= DATE_SUB(now(), INTERVAL 7 DAY); ?

Публикувано от: Constantine 23-02-2024, 11:28
QUOTE (thrawn @ 23-02-2024, 11:27)
Ами това
CODE
SELECT
   invoices.id, invoices.pay_date, DATE_SUB(pay_date, INTERVAL 7 DAY) as pay_date_new
FROM
   `invoices`
limit 10

какво връща?

Тук има резултат

Публикувано от: thrawn 23-02-2024, 11:31
виж редакцията на поста горе

Публикувано от: Constantine 23-02-2024, 11:38
QUOTE (thrawn @ 23-02-2024, 11:31)
виж редакцията на поста горе

Прябва да извадя от pay_date 7 деня

ето ситуация:
днес е 2024-02-23 но трябва да се плати до pay_date е 2024-03-10

т.е плащанията може да са в бъдещ период

Публикувано от: thrawn 23-02-2024, 11:40
Е добре де, изваждаш 7 дена и с какво ги сравняваш? Не може със същата стойност, щото е логически абсурд. Трябва или да вадиш от now или да сравниш с now (или друга дата де)

Демек, вадиш 7 дни от падежът и свряваш дали получената дата е преди днес (за да намериш всички фактури които трябва да се платят в рамките на следващите 7 дни).

Публикувано от: Constantine 23-02-2024, 11:59
QUOTE (thrawn @ 23-02-2024, 11:40)
Е добре де, изваждаш 7 дена и с какво ги сравняваш? Не може със същата стойност, щото е логически абсурд. Трябва или да вадиш от now или да сравниш с now  (или друга дата де)

Демек, вадиш 7 дни от падежът и свряваш дали получената дата е преди днес (за да намериш всички фактури които трябва да се платят в рамките на следващите 7 дни).

Здравей

Малко промених заявката:


QUOTE
SELECT
    invoices.id, invoices.pay_date, DATE_SUB(pay_date, INTERVAL 7 DAY) as pay_date_new
FROM
    `invoices`
WHERE  DATEDIFF(pay_date, DATE_SUB(pay_date, INTERVAL 7 DAY)) >= 7
    AND DATEDIFF(DATE_SUB(CURDATE(), INTERVAL 7 DAY), DATE_SUB(pay_date, INTERVAL 7 DAY)) >= 0;


Изполвам DATEDIFF че сработи icon_smile.gif

Публикувано от: thrawn 23-02-2024, 12:05
То, щом работи е ОК, ама все пак е излишна гимнастика.

Ако от две числа извадиш едно и също число (в твоя случай 7 дни) то разликата се запазва. Така че, или използвай само datediff или date_sub (може да обърнеш логиката с date_add).

Публикувано от: relax4o 23-02-2024, 17:02
CODE

DATE_ADD(CURDATE(), INTERVAL 7 DAY) = pay_date


тук зависи вече дали имплементацията ти е чрез крон, който върви всеки ден и искаш точно 7 дни по-рано да уведомиш, или искаш всеки ден в рамките на тази седмица.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)