2010-11-12 9 views
2

J'essaie d'écrire une sélection où une partie de mes critères compare deux champs DATETIME (provenant de deux tables différentes). L'un est l'année à la fraction, où l'autre est l'année à l'autre. Existe-t-il un moyen d'écrire l'expression de sorte que la valeur de l'année à fraction soit raccourcie d'année en année? Je ne cherche pas à raccourcir le champ pour la sortie, mais j'en ai besoin dans la logique elle-même pour comparer les champs en tant qu'égaux.Comment comparer les champs DATETIME «année par fraction» et «année par année»

Voici un édulcorée regard sur ce que je suis en train de se rendre à:

SELECT BLAH 
    FROM TABLE1 T1 
    JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B 
           AND T1.FIELD1 = 100 
           AND T1.TIMESTAMP = T2.WORDERDATE 

T1.TIMESTAMP est l'année à la fraction, T2.WORDERDATE est l'année à jour

Toute aide, en anglais très simple si possible , serait grandement apprécié!

+3

Et quelle est la notion d'année en fraction et d'année en année? Qu'est-ce qui qualifie une date comme étant l'une d'entre elles? – BeemerGuy

+0

Pour quelle base de données? –

Répondre

0

Pouvez-vous les lancer et comparer?

SELECT BLAH 
FROM TABLE1 T1 
JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B 
          AND T1.FIELD1 = 100 
          AND CAST(FLOOR(CAST(T1.TIMESTAMP AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(T2.WORDERDA AS FLOAT)) AS DATETIME) 
+0

Merci! Cela a fonctionné parfaitement pour ce que je devais accomplir. J'apprécie ton aide. J'ai essayé de marquer la réponse comme utile, mais comme je suis si nouveau sur le site, je n'ai pas assez de répit pour le faire. Merci encore. – Jessica

0

Beemer: J'ai un dictionnaire de données qui me dit spécifiquement que les champs sont à jour l'année ou l'année à la fraction, je peux voir visuellement la longueur du champ dans la base de données ainsi. Le champ de l'année n'est que dix positions, où l'année à fraction est beaucoup plus longue. OMG Ponies: La base de données est en fait une base de données HP Tandem, mais les données ont été répliquées sur un serveur Oracle, sur lequel je cible mes informations.

jon3laze: Je ne connais pas CAST, FLOOR ou FLOAT, mais je vous remercie pour votre réponse. Je vais essayer votre réponse demain pour voir si je peux la faire fonctionner. Merci encore.

0

J'ai juste essayé quelque chose de similaire. Au moins sur un tandem (ou HP NonStop), les suivants suffit:

SELECT BLAH 
    FROM TABLE1 T1 
    JOIN TABLE2 T2 ON T1.A = T2.A AND T1.B = T2.B 
           AND T1.FIELD1 = 100 
           AND T1.TIMESTAMP YEAR TO DAY = T2.WORDERDATE YEAR TO DAY 

Cela chassera les deux Horodatage à « ANNÉE À JOUR », à savoir le format « AAAA-MM-JJ ».