Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie DATE_ADD z nazwą kolumny jako wartością interwału

Uzyskanie wyniku nie będzie łatwe - ponieważ przechowujesz go jako zwykły 1 Year lub podobne. To nie wolno używać go dynamicznie w INTERVAL konstrukcja - składnia MySQL żądania że wskażesz zarówno ilość, jak i typ przedziału.

Istnieje jednak pewien sposób na rozwiązanie tej sprawy:

SELECT 
    product_name, 
    start_date,
    expiry_period,
    @num:=CAST(expiry_period AS UNSIGNED),
    @p  :=SUBSTR(expiry_period, CHAR_LENGTH(@num)+2),
    CASE
      WHEN @p='Year' THEN DATE_ADD(start_date, INTERVAL @num YEAR)
      WHEN @p='Month' THEN DATE_ADD(start_date, INTERVAL @num MONTH)
      WHEN @p='Day' THEN DATE_ADD(start_date, INTERVAL @num DAY)
      WHEN @p='Week' THEN DATE_ADD(start_date, INTERVAL @num WEEK)
    END AS end_date
FROM
    tbl_products

-jak widać, to zapytanie opiera się na fakcie, że ilość zawsze idzie pierwsza (więc CAST wydobędzie dokładnie to, dlatego można go później użyć do uzyskania długości interwału). Ale w każdym razie będziesz musiał powtórzyć wszystkie możliwe typy interwałów w CASE klauzula

Innym dobrym pomysłem byłoby - zapisanie okresu w ujednoliconej formie (na przykład zawsze w dniach) - dzięki czemu będziesz przechowywać tylko jedną liczbę w każdym wierszu (czyli 1 tydzień =7 dni itd.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wysyłanie danych do Bazy Danych w aplikacji webowej React.js

  2. Jakie są różnice w korzystaniu z bazy danych XML i MySQL? Którego powinienem użyć?

  3. Jakie są realne warstwy abstrakcji bazy danych dla Pythona?

  4. Jak ZAMÓWIĆ WEDŁUG na podstawie dwóch różnych kolumn

  5. Zwracanie JSON nie działa poprawnie