2016-08-09 5 views
1

Ich habe das folgende Zeichen "column == 5", die ich in SQL konvertieren möchte: column = 5. Wie mache ich das?Übersetzen von Zeichenbefehlen in SQL mit translate_sql()

Ich habe erfolglos zahlreiche Möglichkeiten ausprobiert, wie unten:

translate_sql(eval(parse(text="column + 5"))) 

aber translate_sql ist eine ‚wörtliche‘ Umwelt und dieser kehrt <SQL> EVAL(PARSE('column + 5' AS "text")).

Ich weiß, dass es einen Trick geben muss!

Antwort

1

Was Sie "literale 'Umgebung" nennen, ist allgemein als eine Funktion mit Nicht-Standard-Auswertung (NSE) bekannt. Im Allgemeinen gibt es verschiedene Möglichkeiten, sie zu umgehen, aber macht dies einfach, indem sie allen NSE-Funktionen Standardbewertungsbegleiter bereitstellt.

Die Standard-Bewertungsbogen von translate_sql werden translate_sql_ genannt:

translate_sql_("column + 5") 

Darüber hinaus ist es oft einfacher, den direkten Weg zu gehen, anstatt eine String-Input Parsing:

translate_sql_(quote(column + 5)) 

In Ihrem Fall Es gibt keinen großen Unterschied, aber in vielen Fällen ist die Form am unteren Rand nützlicher, da es ein R-Objekt ist, das mit R-Methoden manipuliert werden kann. Eine String-Eingabe zu manipulieren, so dass sie immer noch syntaktisch korrekt bleibt, ist viel schwieriger (und, wenig überraschend, weniger effizient).