Làm cách nào để chuyển đổi một số nguyên thành chuỗi như một phần của truy vấn PostgreSQL?


118

Làm cách nào để chuyển đổi một số nguyên thành chuỗi như một phần của truy vấn PostgreSQL?

Vì vậy, ví dụ, tôi cần:

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

nơi <some integer>có thể ở bất cứ đâu từ lâu 1-15 chữ số.


Bạn sẽ làm gì nếu chuỗi của bạn có các số 0 ở đầu?
thisfeller 10/12/12

Câu trả lời:


123

Vì số có thể lên đến 15 chữ số, bạn sẽ chuyển thành số nguyên 64 bit (8 byte). Thử cái này:

SELECT * FROM table
WHERE myint = mytext::int8

Người ::điều hành diễn viên là lịch sử nhưng thuận tiện. Postgres cũng tuân theo cú pháp chuẩn SQL

myint = cast ( mytext as int8)

Nếu bạn có văn bản theo nghĩa đen mà bạn muốn so sánh với một int, hãy truyền intthành văn bản:

SELECT * FROM table
WHERE myint::varchar(255) = mytext

43
Ah. Tôi thực sự cần nó theo cách khác (myint được chuyển đổi thành varchar) nhưng câu trả lời của bạn là đủ để hướng dẫn tôi đến đúng nơi. Tôi chỉ làm myint::varchar(255) = mytextvà nó hoạt động. Cảm ơn!
spyd3rr 10/12/12

3
Nghiêm túc, điều này không trả lời câu hỏi. Ví dụ không phải là vấn đề - chuyển đổi một số nguyên thành một char / string là. Nhưng cảm ơn, @ spyd3rr
Frederik Struck-Schøning,

@fred Không phải vậy: Vấn đề thực tế của OP là cố gắng so sánh các giá trị số và văn bản không thành công. Câu trả lời này chỉ ra cách khắc phục điều đó bằng cách truyền văn bản thành một số (mặc dù OP đã thử truyền một số thành văn bản).
Bohemian

7
@Bohemian Tiêu đề và nội dung câu hỏi cho biết: "Làm cách nào để chuyển đổi một số nguyên thành chuỗi như một phần của truy vấn PostgreSQL?". Sau đó, một ví dụ về thời điểm điều này có thể có liên quan. Trong trường hợp của tôi, tôi tìm thấy chuỗi này vì tôi thực sự phải chuyển đổi một số nguyên thành một chuỗi - không phải để so sánh mà để sử dụng bên trong một hàm tổng hợp sẽ không thành công, nếu đối số không phải là một chuỗi. Trong trường hợp đó, đây không phải là câu trả lời cho câu hỏi, vì nó đọc theo nghĩa đen là atm.
Frederik Struck-Schøning

126

Bạn có thể truyền một số nguyên thành một chuỗi theo cách này

intval::text

và như vậy trong trường hợp của bạn

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

1
Điều này sẽ không hoạt động nếu bạn đang làm việc với SpEL trong các truy vấn gốc jpa. Bạn sẽ phải sử dụng cast trong trường hợp đó.
Raj Shah

12

Bạn có thể làm điều này:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.