Як перетворити ціле число в рядок як частина запиту PostgreSQL?


118

Як перетворити ціле число в рядок як частина запиту PostgreSQL?

Так, наприклад, мені потрібно:

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

де <some integer>може бути від 1 до 15 цифр.


Що ви зробите, якщо у вашому рядку є провідні нулі?
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(255) = mytextі це працює. Дякую!
spyd3rr

3
Строго це не відповідає на запитання. Прикладом не була проблема - перетворення цілого числа в char / string було. Але спасибі, @ spyd3rr
Фредерік Струк-Шонінг

@fred Не так: актуальна проблема ОП невдало намагалася порівняти числові та текстові значення. Ця відповідь показує, як це виправити, перекинувши текст у число (навіть якщо ОП намагався ввести число до тексту).
богем

7
@Bohemian Заголовок і текст питання говорить: "Як перетворити ціле число в рядок як частина запиту PostgreSQL?". Тоді приклад, коли це може бути актуальним. У моєму випадку я знайшов цей потік, тому що мені насправді довелося перетворити ціле число в рядок - не для порівняння, а для використання всередині функції сукупності, яка б вийшла з ладу, якщо аргумент не був рядком. У цьому випадку це не було відповіддю на запитання, оскільки воно буквально читає атм.
Фредерік Струк-Шонінг

126

Таким чином можна надати ціле число до рядка

intval::text

і так у вашому випадку

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

1
Це не спрацює, якщо ви працюєте зі SpEL у власних запитах jpa. У цьому випадку вам доведеться використовувати ролі.
Радж Шах

12

Ви можете це зробити:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.