Wie konvertiere ich eine Ganzzahl als Teil einer PostgreSQL-Abfrage in einen String?

118

Wie konvertiere ich eine Ganzzahl als Teil einer PostgreSQL-Abfrage in einen String?

So brauche ich zum Beispiel:

SELECT * FROM table WHERE <some integer> = 'string of numbers'

wo <some integer>kann irgendwo von 1 bis 15 Stellen lang sein.

spyd3rr
quelle
Was werden Sie tun, wenn Ihre Zeichenfolge führende Nullen hat?
Thisfeller

Antworten:

122

Da die Zahl bis zu 15 Stellen umfassen kann, müssen Sie eine 64-Bit-Ganzzahl (8 Byte) umwandeln. Versuche dies:

SELECT * FROM table
WHERE myint = mytext::int8

Der ::Darsteller ist historisch, aber praktisch. Postgres entspricht auch der SQL-Standardsyntax

myint = cast ( mytext as int8)

Wenn Sie wörtlichen Text haben, den Sie mit einem vergleichen möchten, setzen Sie intden folgenden intText um:

SELECT * FROM table
WHERE myint::varchar(255) = mytext
Böhmisch
quelle
43
Ah. Ich brauchte es tatsächlich umgekehrt (myint wurde in varchar umgewandelt), aber Ihre Antwort reichte aus, um mich an den richtigen Ort zu führen. Ich habe es gerade getan myint::varchar(255) = mytextund es funktioniert. Vielen Dank!
spyd3rr
3
Streng genommen beantwortet dies die Frage nicht. Das Beispiel war nicht das Problem - die Konvertierung einer Ganzzahl in ein Zeichen / eine Zeichenfolge war. Aber danke, @ spyd3rr
Frederik Struck-Schøning
@fred Nicht so: Das eigentliche Problem von OP bestand darin, erfolglos zu versuchen, numerische und Textwerte zu vergleichen. Diese Antwort zeigt, wie Sie dies beheben können, indem Sie den Text in eine Zahl umwandeln (obwohl OP versucht hat, eine Zahl in Text umzuwandeln).
Böhmisch
7
@Bohemian Der Titel und der Text der Frage lauten: "Wie konvertiere ich eine Ganzzahl als Teil einer PostgreSQL-Abfrage in einen String?". Dann ein Beispiel , wann dies könnte relevant sein. In meinem Fall habe ich diesen Thread gefunden, weil ich tatsächlich eine Ganzzahl in eine Zeichenfolge konvertieren musste - nicht zum Vergleich, sondern zur Verwendung innerhalb einer Aggregatfunktion, die fehlschlagen würde, wenn das Argument keine Zeichenfolge wäre. In diesem Fall war dies keine Antwort auf die Frage, da sie buchstäblich atm lautet.
Frederik Struck-Schøning
125

Auf diese Weise können Sie eine Ganzzahl in eine Zeichenfolge umwandeln

intval::text

und so in deinem Fall

SELECT * FROM table WHERE <some integer>::text = 'string of numbers'
Brugolo
quelle
1
Dies funktioniert nicht, wenn Sie mit SpEL in nativen jpa-Abfragen arbeiten. In diesem Fall müssen Sie Besetzung verwenden.
Raj Shah
12

Sie könnten dies tun:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
djgupta
quelle