Comparer les colonnes de date
J'ai besoin de récupérer les lignes qui service_date est plus grand que prod_date.
Le type de données pour prod_date est de type VARCHAR(10) (2/20/2014 par exemple) et le type de données pour service_date est la DATE (AAAAMMJJ). Si j'ai une requête service_date à l'aide de "sélectionner service_date de service où service_date ='20140201'", le résultat est de montrer "2/1/2014" dans la grille des résultats. Toutefois, il ne fonctionne pas dans la requête ci-dessous lorsque j'convertir service_date varchar pour comparer avec prod_date. Il tire tous les rangs au lieu de ceux qui ont plus de service_date.
SELECT P.PROD_ID, P.PROD_DESC, S.PROD_ID, S.SERVICE_LOC
FROM PRODUCT P
INNER JOIN SERVICE S
WHERE P.PROD_ID = S.PROD_ID
AND CAST(S.SERVICE_DATE AS VARCHAR(10)) >= P.PROD_DATE
- Sont tous les mois entre janvier et septembre, un chiffre, mois pour
PROD_DATE
? - Oui à un seul chiffre.
Vous devez vous connecter pour publier un commentaire.
Je vous suggère d'utiliser la date de la commande au lieu de string/varchar la commande si possible pour des raisons de simplicité et depuis sa [ probablement ] plus près de ce que vous êtes intéressé et moins susceptible de confondre les
Par exemple
mais
Afin de garder les choses simples, il est logique de fonte
PROD_DATE
pour une date lors de la comparaison de ces deux domaines comme :si theres aucun doute sur prod_dates qualité que les dates de validité pouvez vérifier la conversion sur toutes les dates de la première ( avant l'exécution de réglage ci-dessus )
Ce n'est pas 100% à l'abri des erreurs, compte tenu de votre date, c'est le caractère et pourrait avoir des valeurs inattendues. Il montre comment vous pouvez ajouter un 0 à la valeur du mois, et de le jeter à une date où le mois est déterminé à un seul chiffre en fonction de l'emplacement de la
/
dans la deuxième position de laPROD_DATE
valeur pour une ligne donnée.