ฉันจะแปลงจำนวนเต็มเป็นสตริงเป็นส่วนหนึ่งของแบบสอบถาม PostgreSQL ได้อย่างไร


119

ฉันจะแปลงจำนวนเต็มเป็นสตริงเป็นส่วนหนึ่งของแบบสอบถาม 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)

หากคุณมีข้อความตามตัวอักษรที่ต้องการเปรียบเทียบกับ an intให้ส่งintข้อความเป็น:

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

43
อา. จริงๆแล้วฉันต้องการมันในทางอื่น (myint แปลงเป็น varchar) แต่คำตอบของคุณเพียงพอที่จะนำทางฉันไปยังสถานที่ที่ถูกต้อง ฉันเพิ่งทำmyint::varchar(255) = mytextและได้ผล ขอบคุณ!
spyd3rr

3
อย่างเคร่งครัดนี่ไม่ได้ตอบคำถาม ตัวอย่างไม่ใช่ปัญหา - การแปลงจำนวนเต็มเป็นอักขระ / สตริงคือ แต่ขอบคุณ @ spyd3rr
Frederik Struck-Schøning

@fred ไม่เป็นเช่นนั้น: ปัญหาที่แท้จริงของ OP คือการพยายามเปรียบเทียบค่าตัวเลขและข้อความไม่สำเร็จ คำตอบนี้แสดงวิธีแก้ไขโดยการส่งข้อความเป็นตัวเลข (แม้ว่า OP จะพยายามแคสต์ตัวเลขเป็นข้อความ)
โบฮีเมีย

7
@ โบฮีเมียนชื่อคำถามและข้อความระบุว่า: "ฉันจะแปลงจำนวนเต็มเป็นสตริงเป็นส่วนหนึ่งของแบบสอบถาม PostgreSQL ได้อย่างไร" แล้วตัวอย่างเช่นเมื่อนี้อาจจะมีความเกี่ยวข้อง ในกรณีของฉันฉันพบเธรดนี้เพราะจริงๆแล้วฉันต้องแปลงจำนวนเต็มเป็นสตริงไม่ใช่เพื่อการเปรียบเทียบ แต่สำหรับการใช้ภายในฟังก์ชันการรวมที่จะล้มเหลวหากอาร์กิวเมนต์ไม่ใช่สตริง ในกรณีนี้นี่ไม่ใช่คำตอบสำหรับคำถามเนื่องจากอ่าน atm อย่างแท้จริง
Frederik Struck-Schøning

126

คุณสามารถโยนจำนวนเต็มให้กับสตริงได้ด้วยวิธีนี้

intval::text

และในกรณีของคุณ

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

1
สิ่งนี้จะไม่ได้ผลหากคุณกำลังทำงานกับ SpEL ในการสืบค้นเนทีฟของ jpa คุณจะต้องใช้นักแสดงในกรณีนั้น
Raj Shah

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.