Voici la requête et le code attachés à la requête. Je ne suis pas en mesure de comprendre comment utiliser la date 31-dec-2006 dans le problème.
Pour chaque propriété locative, indiquez l'adresse, indiquez la rue, la ville, l'état. Indiquez également le type de location et le nombre de jours indiqués comme "Nombre de jours indiqués". Trier les résultats par type de location croissant et nombre de jours décroissant. Au lieu d'utiliser la date du jour pour déterminer les jours listés, utilisez le 31 décembre 2006
Le problème est que je ne reçois aucun résultat pour cette requête. Je crois que je fais quelque chose de mal dans la déclaration where. Je ne sais pas comment attribuer une valeur à la date.
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of Days Listed" from rentproperty where sysdate = '31-dec-2006' order by rp_type asc, "Number of Days Listed" desc;
4 Réponses :
Dans oracle, sysdate est la date actuelle, donc à moins qu'aujourd'hui soit le 31 décembre 2006, vous n'obtiendrez aucun résultat. Si vous avez utilisé "sysdate" comme nom de colonne, essayez de le mettre entre guillemets.
La condition sysdate = '31 -dec-2006 'est fausse, c'est pourquoi aucune sortie !!
c'est probablement ce dont vous avez besoin:
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of Days Listed" from rentproperty where rp_datelisted= '31-dec-2006' order by rp_type asc, "Number of Days Listed" desc;
Lorsque vous travaillez avec des dates, travaillez avec des dates, pas des chaînes. '31 -dec-2006 '
est juste une chaîne. Cela ressemble à une date (pour nous, les humains), Oracle essaiera de la convertir en une date (si elle le peut), mais vous ne pouvez jamais être sûr que cela fonctionnera. Par exemple, cela ne fonctionnera pas dans ma base de données:
SQL> with rentproperty (rp_street, rp_type, rp_datelisted) as 2 (select 'Oak street' , 'Type A', date '2000-01-25' from dual union all 3 select '31st street', 'Type B', date '2001-10-30' from dual union all 4 select 'Elm street' , 'Type B', date '2004-08-25' from dual union all 5 select 'Bee street' , 'Type A', date '2006-11-30' from dual 6 ) 7 select rp_street, 8 rp_type, 9 (date '2006-12-31' - rp_datelisted) days_listed 10 from rentproperty 11 where rp_datelisted < date '2006-12-31' 12 order by rp_type asc, days_listed desc; RP_STREET RP_TYP DAYS_LISTED ----------- ------ ----------- Oak street Type A 2532 Bee street Type A 31 31st street Type B 1888 Elm street Type B 858 SQL>
Si je corrige plusieurs choses, cela fonctionnera:
SQL> alter session set nls_date_language = english; Session altered. SQL> alter session set nls_date_format = 'dd-mon-yyyy'; Session altered. SQL> select count(*) From emp where hiredate < '31-dec-2006'; COUNT(*) ---------- 14 SQL>
Par conséquent, soit utiliser un littéral de date (qui ressemble toujours à date 'aaaa-mm-jj'
), soit appliquer la fonction TO_DATE
à une chaîne, avec un masque de format approprié, par exemple to_date ('31 .12.2006 ',' dd.mm.yyyy ')
et votre requête fonctionnera toujours .
Voici ce que vous aurait pu faire (j'ai raccourci la liste des colonnes); le RENTPROPERTY
CTE répertorie quelques exemples de données; vous avez besoin du code à partir de la ligne 7.
SQL> select count(*) From emp where hiredate < '31-dec-2006'; select count(*) From emp where hiredate < '31-dec-2006' * ERROR at line 1: ORA-01858: a non-numeric character was found where a numeric was expected
Ils ont probablement encore besoin d'une clause WHERE. Peut-être where rp_datelisted
Probablement; fixé. Merci, @APC.
Le sysdate Oracle renvoie la date et l'heure. Essayez trunc (sysdate) pour comparer des valeurs similaires.
select rp_street, rp_city, rp_state, rp_type, (rp_datelisted - sysdate) as "Number of Days Listed" from rentproperty where trunc(sysdate) = '31-dec-2006' order by rp_type asc, "Number of Days Listed" desc;
À moins que nous n'utilisions l'horloge interne du serveur, sysdate
ne sera plus jamais égal à date '2006-12-31'
. Le tronquer ne changera pas cette vérité calendaire.
J'ai supposé que c'était une évidence. Mon erreur. Mais il est vrai que vous devez comparer des valeurs similaires et JJ / MM / AAAA HH: MM: SS n'est pas la même chose que JJ / MM / AAAA.
Veuillez fournir un exemple de sortie et le résultat souhaité.
Veuillez également mentionner le problème auquel vous êtes confronté.
où la condition sysdate = '31 -dec-2006 'est fausse c'est pourquoi aucune sortie !!
SYSDATE est une pseudo-colonne - une fonction - qui renvoie la date et l'heure actuelles . Le seul moment où
sysdate = '31 -dec-2006 '
était vrai était le 31 décembre 2006 à minuit.