BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> date_sub in where
Constantine
Публикувано на: 23-02-2024, 10:49
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 225
Регистриран на: 13.04.05



Здравейте група,

Опитвам се да пусна една заявка към базата 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" - резултат има.


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

С Уважение Константин
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 23-02-2024, 11:18
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3679
Регистриран на: 17.01.17



Да нямаш проблеми с форматът на датата? Полето pay_date в какъв формат е?
PMEmail Poster
Top
Constantine
Публикувано на: 23-02-2024, 11:24
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 225
Регистриран на: 13.04.05



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

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

Пример: 2024-02-02
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 23-02-2024, 11:27
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3679
Регистриран на: 17.01.17



Ами това
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); ?

Това мнение е било редактирано от thrawn на 23-02-2024, 11:31
PMEmail Poster
Top
Constantine
Публикувано на: 23-02-2024, 11:28
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 225
Регистриран на: 13.04.05



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

какво връща?

Тук има резултат
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 23-02-2024, 11:31
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3679
Регистриран на: 17.01.17



виж редакцията на поста горе
PMEmail Poster
Top
Constantine
Публикувано на: 23-02-2024, 11:38
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 225
Регистриран на: 13.04.05



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

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

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

т.е плащанията може да са в бъдещ период
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 23-02-2024, 11:40
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3679
Регистриран на: 17.01.17



Е добре де, изваждаш 7 дена и с какво ги сравняваш? Не може със същата стойност, щото е логически абсурд. Трябва или да вадиш от now или да сравниш с now (или друга дата де)

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

Това мнение е било редактирано от thrawn на 23-02-2024, 11:44
PMEmail Poster
Top
Constantine
Публикувано на: 23-02-2024, 11:59
Quote Post



Име: Константин К
Група: Потребител
Ранг: Активен

Мнения: 225
Регистриран на: 13.04.05



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
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 23-02-2024, 12:05
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3679
Регистриран на: 17.01.17



То, щом работи е ОК, ама все пак е излишна гимнастика.

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

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0