J'ai une table avec des données et des colonnes contenant une date mais séparée dans plusieurs colonnes:
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()
5 Réponses :
Le 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. P> p> TimeStamp_Format () Code> La fonction doit être robuste à des mois / jours étant un ou deux chiffres:
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.
Utilisez la fonction LPAD avec la fonction TIMESTAMP_FORMAT P>
Sélectionnez *
de l'Etude
où TimeStamp_Format (année || LPAD (mois, 2, '0') || LPAD (jour, 2, '0'), 'yyyymmdd')> maintenant ();
code> p>
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;
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 || code> 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') CODE> doit travailler en ignorant le format de date par défaut dans le système.
@CLARISSEB Contactez votre administrateur système sur pourquoi || code> 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
Pour combiner vos 2 questions dans 1 réponse et utiliser la réponse de Satya P>
Sélectionnez * de l'Etude Où TimeStamp_Format (Année || LPAD (mois, 2, 2, '0') || LPAD (jour, 2, '0'), 'yyyymmdd')> maintenant () - 2 mois; P>
Ceci est une autre option
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 () code> ressemble à mysql pour moi? Est-ce?
C'est ce qui suit: DB2400