0
votes

Demande SQL avec date

J'ai une table avec des données et des colonnes contenant une date mais séparée dans plusieurs colonnes:

  • une colonne avec l'année, li>
  • une colonne avec le mois, li>
  • une colonne avec la journée. LI> ul>

    Je voudrais garder uniquement les données avec une date inférieure à 2 mois. P>

    J'ai essayé de concéder la date mais le mois et le jour n'ont pas toujours 2 personnages. Parfois, c'est un numéro: 1 pour janvier par exemple. P>

    Pourriez-vous donner des conseils pour faire cette demande? P>

    Merci d'avance, P>

    select *
    from etude
    where concat(year,month,day) > NOW()
    


3 commentaires

Quel SGBD utilisez-vous? En ce qui concerne la date / l'heure et la manipulation des chaînes, de nombreux produits ont leurs propres fonctions.


maintenant () ressemble à mysql pour moi? Est-ce?


C'est ce qui suit: DB2400


5 Réponses :


1
votes

Le TimeStamp_Format () La fonction doit être robuste à des mois / jours étant un ou deux chiffres: xxx

mais notez que pendant que cela puisse résoudre votre problème immédiat. Une solution à long terme bien meilleure serait d'arrêter de stocker les différents composants de votre date dans des colonnes séparées. Au lieu de cela, maintenez simplement une seule colonne de date / horodatage de bonne foi.


4 commentaires

Merci pour votre réponse,


Savez-vous comment je peux limiter jusqu'au 2 derniers mois? Je voudrais supprimer certaines valeurs de cette date mais je n'ai pas pensé au changement d'année ....


S'il vous plaît, faites-moi d'abord savoir si cette réponse résolue votre question initiale.


Note latérale: Cela ignorera l'utilisation d'indices sur l'une de ces colonnes.



0
votes

Utilisez la fonction LPAD avec la fonction TIMESTAMP_FORMAT

Sélectionnez * de l'Etude où TimeStamp_Format (année || LPAD (mois, 2, '0') || LPAD (jour, 2, '0'), 'yyyymmdd')> maintenant ();


0 commentaires

0
votes

Si Ne gardez que les données avec une date inférieure à 2 mois code> signifie Ne gardez que les données avec une date qui n'est pas plus tôt de 2 mois à compter de la date actuelle code> , alors essayez ceci tel quel:

SELECT dt
FROM 
(
  SELECT date(digits(dec(year, 4)) || '-' || digits(dec(month, 2))|| '-' || digits(dec(day, 2))) dt
  FROM table
  (
  values 
    (2019, 1, 1)
  , (2019, 7, 13)
  ) etude (year, month, day)
)
WHERE dt > current date - 2 month;


9 commentaires

le || Les signes ne sont pas possibles, je ne sais pas pourquoi ... J'ai réussi à trouver une autre solution de sélection de la date de sélection (Concat (Concat (Concat (Dec (Dec (B.DTDBA, 4)), Concat (chiffres (Dec (B.DTDBM, 2)), '-')), chiffres (DEC (B.DTDBJ, 2)))) DT de EDEC B Mais quelle partie utilisée pour les valeurs (2019, 1, 1 ), (2019, 7, 13)) Etude (année, mois, jour)


Ma déclaration fonctionne bien sur mon IBM I V7.3. Quelle est votre version DB2? Quel est le message d'erreur complet que vous obtenez à l'aide de ces || signes?


J'ai eu l'erreur suivante: Ellément Syntaxique | N'est Pas correct. Elénements possibles :) ,.


Maintenant, j'essaye ces 2 réuqests, mais j'ai toujours eu une erreur sur la date de sélection de la valeur DT (Concat (Concat (Concat (Concat (Dec (B.DTDBA, 4)), '-'), Concat (DIP (Dec (Dec B.DTDBM, 2)), '-')), chiffres (DEC (B.DTDBJ, 2)))) DT de EDEC B Où DT> (date actuelle - 2 mois)


La deuxième demande que j'ai essayée: Sélectionnez DT de (Sélectionnez la date (Concat (Concat (Concat (Concat (Dec (Dec (B.DTDBA, 4)), Concat (chiffres (Dec (B.DTDBM, 2))), '-')), chiffres (DEC (B.DTDBJ, 2)))) DT de EDEC B) où DT> date actuelle - 2 mois;


Modifiez SQL en fonction du format de date par défaut sur votre système. Exemple donné par @MarkBarInstein est basé sur le format de date AAAA-MM-MM-DD.


@Satya Date ('AAA-MM-DD') doit travailler en ignorant le format de date par défaut dans le système.


@CLARISSEB Contactez votre administrateur système sur pourquoi || Les symboles ne fonctionnent pas dans votre système.


@MarkBarInstein, merci pour la mise à jour. Je ne savais pas que la fonction de date acceptera à la fois le format de date ISO et le format de date par défaut lorsque le format de date par défaut est différent du format de la date ISO



0
votes

Pour combiner vos 2 questions dans 1 réponse et utiliser la réponse de Satya

Sélectionnez * de l'Etude Où TimeStamp_Format (Année || LPAD (mois, 2, 2, '0') || LPAD (jour, 2, '0'), 'yyyymmdd')> maintenant () - 2 mois;


0 commentaires

0
votes

Ceci est une autre option xxx


0 commentaires