BASH - Virgoletta singola all'interno di virgoletta doppia per la clausola Where di SQL
Domanda
Devo inviare un confronto di date correttamente formattato la clausola WHERE a un programma sulla riga di comando in bash.
Una volta entrato nel programma chiamato, la clausola WHERE dovrebbe essere valida per Oracle e dovrebbe apparire esattamente così:
highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')
Il valore della data è in una variabile. Ho provato una varietà di combinazioni di virgolette e barre rovesciate. Piuttosto che confondere il problema e dare esempi dei miei errori, spero in una risposta precisa e incontaminata, non rovinata dal dreck.
Se dovessi scriverlo in Perl, l'incarico penserei che sia così:
$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";
Come posso ottenere lo stesso effetto in bash?
Soluzione
hiwaterval='11-Sep-2009'
where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"
facoltativamente aggiungi " export " prima dell'impostazione della variabile finale se deve essere visibile dalla shell corrente.
Altri suggerimenti
Hai provato a usare i doppi segni di spunta? Like highwater > TO_DATE ('' 11-Sep-2009 '', '' DD-MON-YYYY ''). Solo un suggerimento. Non l'ho provato.
Puoi assegnare la clausola where in questo modo:
export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`
(con i backtick attorno all'istruzione echo - non vengono visualizzati nel mio editor qui ...)
che funziona con uno script shell del modulo:
sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS