je dois select
des données de base de données Oracle 11g
, mais je ne peux pas à comprendre pourquoi la suite select
requête échoue:Les résultats de la conversion de la date SQL en "paramètre de modèle de format numérique non valide".
SELECT
INFO_ID,
INFO_DETAIL,
IMPORTANT_FLG,
DELETE_FLG,
CREATE_TIME,
DISPLAY_ORDER
FROM TABLE_NAME
WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD') AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')
ORDER BY IMPORTANT_FLG DESC NULLS LAST , DISPLAY_ORDER ASC NULLS LAST, CREATE_TIME DESC, INFO_ID ASC
La requête échoue avec message d'erreur suivant:
ORA-01481: invalid number format model
01481. 00000 - "invalid number format model"
*Cause: The user is attempting to either convert a number to a string
via TO_CHAR or a string to a number via TO_NUMBER and has
supplied an invalid number format model parameter.
Mon entrée pour les variables fromDate
et toDate
sont juste des chaînes de date telles que 20111010
etc. J'ai aussi essayé plus de temps spécifique (même format que dans le tableau), mais cela ne semble pas être le problème ..
Dans la base de données de la colonne CREATE_TIME
est de type TIMESTAMP(6)
, et par exemple un échantillon est 2011/12/19 08:04:42
Toutes les idées pourquoi cela erreur apparaît?
Je ne connais pas PL/SQL (tel qu'utilisé par Oracle) mais vous devriez pouvoir utiliser ISO-8601 ("aaaa-MM-jj") comme format. Avez-vous essayé d'utiliser des tirets au lieu de barres obliques? – Dai
@dai, merci pour la suggestion. Malheureusement je reçois la même erreur même avec des tirets (j'ai essayé: sans tirets en entrée, avec des tirets en entrée, et aussi des tirets pour le paramètre TO_CHAR) – julumme
'TO_CHAR (: fromDate, 'AAAA/MM/DD')' est faux. Vous convertissez un NUMBER en STRING, en supposant qu'il s'agit de DATE. '20111010' n'est pas une DATE, c'est un NUMBER. De plus, "20111010" n'est pas une DATE, c'est une STRING. Ils sont complètement différents. –