Как преобразовать целое число в строку как часть запроса PostgreSQL?

119

Как преобразовать целое число в строку как часть запроса PostgreSQL?

Так, например, мне нужно:

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

где <some integer>может быть от 1 до 15 цифр.

spyd3rr
источник
Что вы будете делать, если в вашей строке есть ведущие нули?
thisfeller

Ответы:

124

Поскольку число может содержать до 15 цифр, вы можете преобразовать его в 64-битное (8-байтовое) целое число. Попробуй это:

SELECT * FROM table
WHERE myint = mytext::int8

::Оператор приведения является историческим , но удобно. Postgres также соответствует стандартному синтаксису SQL

myint = cast ( mytext as int8)

Если у вас есть буквальный текст, который вы хотите сравнить с, преобразуйте intего intв текст:

SELECT * FROM table
WHERE myint::varchar(255) = mytext
Богемный
источник
43
Ах. На самом деле мне было нужно наоборот (myint преобразован в varchar), но вашего ответа было достаточно, чтобы направить меня в нужное место. Я только что сделал, myint::varchar(255) = mytextи это работает. Спасибо!
spyd3rr
3
Строго говоря, это не ответ на вопрос. Пример не был проблемой - преобразование целого числа в символ / строку было. Но спасибо, @ spyd3rr
Фредерик Штрук-Шёнинг
@fred Не совсем так: настоящая проблема OP заключалась в безуспешной попытке сравнить числовые и текстовые значения. В этом ответе показано, как исправить это, преобразовав текст в число (хотя OP пытался преобразовать число в текст).
Bohemian
7
@Bohemian В заголовке и тексте вопроса говорится: «Как преобразовать целое число в строку как часть запроса PostgreSQL?». Тогда пример того, когда это может быть актуально. В моем случае я нашел этот поток, потому что мне действительно пришлось преобразовать целое число в строку - не для сравнения, а для использования внутри агрегатной функции, которая завершилась бы ошибкой, если бы аргумент не был строкой. В этом случае это не был ответ на вопрос, так как он буквально читается как атм.
Frederik Struck-Schøning
126

Вы можете преобразовать целое число в строку таким образом

intval::text

и так в вашем случае

SELECT * FROM table WHERE <some integer>::text = 'string of numbers'
Brugolo
источник
1
Это не сработает, если вы работаете с SpEL в собственных запросах jpa. В этом случае вам придется использовать приведение.
Raj Shah
12

Вы могли сделать это:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
djgupta
источник