2017-06-12 6 views
0

Utilisation de SQL sur une base de données Progress (SQL92)SQL (dans la base de données Progress) - Date - Erreur 7481 - Types Incohérence

L'utilisation d'un logiciel (conçu pour Pervasive) qui permet l'écriture de rapports, etc., qui peut être envoyé par courrier électronique aux utilisateurs

J'ai reçu l'erreur suivante avec mon SQL:

débogage SQL: [DataDirect] [ODBC PROGRÈS pilote] [eN COURS] Types incohérence (7481)

Le code suivant fonctionne parfaitement:

Select * FROM pub."stockmaster" 
Where ("sm-sold" = 0 OR ("sm-sold" = 1 AND "sm-selldate" >= '2017-06-01')) 

Le problème (erreur) vient quand je l'utilise intégré dans les 'variables' du logiciel, tels que @[email protected] qui affiche comme '01 Juin 2017'

Select * FROM pub."stockmaster" 
Where ("sm-sold" = 0 OR ("sm-sold" = 1 AND "sm-selldate" >= @[email protected])) 

-je utiliser ce « système variable », donc je ne dois pas continuer à changer la date de SQL manuellement chaque mois

le champ "sm-selldate" est formaté en tant que type date en cours

Ces variables système fonctionnent parfaitement bien sur une base de données Pervasive

J'ai cherché forums couple et vu des suggestions de CONVERT(DATETIME,, mais pas de solution viable

+0

Version du progrès? Toujours bon d'inclure cela puisque le comportement a pu changer. – Jensd

+0

PROGRESS Version 9.1E0422, OpenEdge Release 10.2B08 – modhorat

Répondre

0

Aïe, 9.1e est ancienne ...

Peut-être une combinaison de CURDATE, TO_CHAR et TO_DATE pourrait le faire?

Je ne cours pas SQL vers OpenEdge donc je ne peux pas vraiment le tester.

TO_DATE(TO_CHAR(MONTH(CURDATE()) + "/1/" + TO_CHAR(YEAR(CURDATE())) 

Mon intention ist que la chaîne dans TO_DATE devrait se résoudre à quelque chose comme

'6/1/2017' 

(premier Juin 2017).

est ici la documentation du 9.1e SQL-92:

https://community.progress.com/community_groups/openedge_general/w/openedgegeneral/1777.9-1e-sql-92-guide-and-reference

+0

Il prend des dates (ou plutôt des chaînes) au Format de _YYYY-MM-DD'_, Dans le lien: [documentation.progress.com] (https: // documentation .progress.com/output/ua/OpenEdge_latest/index.html # page/dvint/format-specifiers-allowed-avec-le-char-et-t.html) il montre 'MM' au lieu de' MONTH' – modhorat

+0

Changer cela ne serait pas trop compliqué. 'TO_DATE (TO_CHAR (YEAR (CURDATE()) +" - "+ TO_CHAR (MONTH (CURDATE()))'? Cependant: vous faites un lien vers la version 11.7 de la documentation.Il a été publié en avril 2017. Votre version (selon votre comment) est 9.1 - il a été publié en 2004 et a pris sa retraite en 2015 - les choses pourraient très bien avoir changé – Jensd

+0

C'est ce qui a finalement fonctionné: ''@ YEAR @' + '-' + '@ MONTH @' + '-' + '01 '' Merci pour toute l'aide – modhorat