sql >> Databáze >  >> RDS >> Mysql

Použití DATE_ADD s názvem sloupce jako hodnota intervalu

Získat výsledek nebude snadné – protože jej ukládáte jako prostý 1 Year nebo podobné. Není povoleno jej používat dynamicky v INTERVAL konstrukt - MySQL syntaxe požadavky že ukážete jak intervalové množství, tak typ.

Existuje však trik, jak tuto záležitost vyřešit:

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 vidíte, tento dotaz se opírá o skutečnost, že množství je vždy na prvním místě (takže CAST extrahuje přesně to, proto jej lze použít k získání délky intervalu po tomto). V každém případě však budete muset přepočítat všechno možné typy intervalů v CASE doložka

Dalším dobrým nápadem by bylo - uložit menstruaci v jednotné podobě (například vždy ve dnech) - takže budete ukládat pouze jedno číslo pro každý řádek (tedy 1 týden =7 dní atd.)



  1. Jak zajistit, aby vi keybindings fungovaly v mysql klientovi?

  2. Načtení všech oprávnění k objektu pro konkrétní roli

  3. Jak získat název dne z data v Oracle

  4. Oracle:načítání velkého souboru xml?