2010-08-12 14 views
2

J'ai une colonne de jour Varchar et je voudrais sélectionner toutes les lignes où la colonne jour du jour correspond au jour actuel dans le système. J'ai trouvé cette requête mais elle n'a trouvé aucune correspondance, bien qu'aujourd'hui c'est jeudi et qu'il y ait jeudi dans la colonne du jour. Je ne suis pas sûr si c'est la bonne façon de comparer le type de données de date avec varchar.comparaison du type de date du jour avec la colonne de jour Varchar dans Oracle

select * from schedule 
where day = (select to_char(sysdate,'day') from dual); 

Répondre

9

Je pense que le problème vient du fait que to_char fonctions sont complétées par des espaces par défaut:

SQL> SELECT '.' || to_char(SYSDATE + rownum, 'day') || '.' AS "Day" 
    2 FROM dual CONNECT BY LEVEL <= 5; 

Day 
----------- 
.friday . 
.saturday . 
.sunday . 
.monday . 
.tuesday . 

Pour éviter padding, utilisez le préfixe fm:

SQL> select * from dual where to_char(sysdate, 'fmday')='thursday'; 

DUMMY 
----- 
X 

Notez également que la comparaison VARCHAR est sensible à la casse.

+0

C'était le problème. Merci Vincent – Mike55

+0

+1 - belle prise – dpbradley

1

Votre requête ressemble à moi raisonnable, je vérifier que to_char (sysdate, « jour ») revient effectivement jeudi comme prévu. Sur une note de côté, il n'est pas nécessaire d'utiliser une sous-requête dans ce cas. Une plus simple, mais requête équivalente est:

select * from schedule where day = to_char(sysdate, 'day'); 
+0

oui ça revient vraiment jeudi (tous les caractères minuscules sont exactement les mêmes que dans ma table) – Mike55