Question

Je dois envoyer une clause WHERE de comparaison de dates correctement formatée à un programme en ligne de commande sous bash.

Une fois entré dans le programme appelé, la clause WHERE devrait être valide pour Oracle et ressembler exactement à ceci:

highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')

La date est dans une variable. J'ai essayé diverses combinaisons de guillemets et de barres obliques inverses. Plutôt que de confondre le problème et de donner des exemples de mes erreurs, j'espère une réponse exacte et sans reproche, sans tache.

Si je devais l'écrire en Perl, la tâche ressemblerait à ceci:

$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";

Comment puis-je obtenir le même effet avec bash?

Était-ce utile?

La solution

hiwaterval='11-Sep-2009'

where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"

ajoutez éventuellement "export". avant le réglage final de la variable si elle doit être visible à côté du shell actuel.

Autres conseils

Avez-vous essayé d’utiliser des doubles ticks? Comme pour les hautes eaux > TO_DATE ('' 11-Sep-2009 '', '' DD-MON-YYYY ''). Juste une suggestion. Je ne l'ai pas essayé.

Vous pouvez affecter la clause where comme ceci:

export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`

(avec des guillemets autour de la déclaration echo - ils n'apparaissent pas dans mon éditeur ici ...)

qui fonctionne avec un script shell de la forme:

sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top