PostgreSQL sorgusunun bir parçası olarak bir tamsayıyı dizeye nasıl dönüştürebilirim?


119

PostgreSQL sorgusunun bir parçası olarak bir tamsayıyı dizeye nasıl dönüştürebilirim?

Yani, örneğin ihtiyacım olan:

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

<some integer>1 ila 15 basamak uzunluğunda herhangi bir yerde olabilir.


Dizinizin başında sıfırlar varsa ne yapacaksınız?
thisfeller

Yanıtlar:


124

Sayı 15 haneye kadar olabileceğinden, 64 bitlik (8 bayt) bir tamsayıya çevirmek isteyeceksiniz. Bunu dene:

SELECT * FROM table
WHERE myint = mytext::int8

::Dökme operatörü tarihsel fakat uygundur. Postgres ayrıca SQL standart sözdizimine de uygundur

myint = cast ( mytext as int8)

Bir ile karşılaştırmak istediğiniz birebir metniniz varsa int, intmetne çevirin:

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

43
Ah. Aslında tam tersine ihtiyacım vardı (myint varchar'a dönüştürüldü) ama cevabınız beni doğru yere yönlendirmek için yeterliydi. Sadece yaptım myint::varchar(255) = mytextve işe yarıyor. Teşekkürler!
spyd3rr

3
Kesinlikle, bu soruya cevap vermiyor. Örnek problem değildi - bir tamsayıyı char / string'e dönüştürmek. Ama teşekkürler, @ spyd3rr
Frederik Struck-Schøning

@fred Öyle değil: OP'nin asıl sorunu, başarısız bir şekilde sayısal ve metin değerlerini karşılaştırmaya çalışmaktı. Bu cevap, metni bir sayıya çevirerek bunun nasıl düzeltileceğini gösterir (OP metne bir sayı atamaya çalışsa bile).
Bohemian

7
@Bohemian Soru başlığı ve metni şöyle diyor: "Bir tamsayıyı PostgreSQL sorgusunun bir parçası olarak dizgeye nasıl dönüştürebilirim?". O zaman bunun ne zaman alakalı olabileceğine dair bir örnek . Benim durumumda, bu iş parçacığını buldum çünkü aslında bir tamsayıyı dizeye dönüştürmek zorunda kaldım - karşılaştırma için değil, argüman bir dize değilse başarısız olacak bir toplama işlevinin içinde kullanmak için. Bu durumda, kelimenin tam anlamıyla atm okuduğu için bu sorunun cevabı değildi.
Frederik Struck-Schøning

126

Bu şekilde bir dizeye bir tamsayı çevirebilirsiniz.

intval::text

ve senin durumunda

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

1
Jpa yerel sorgularda SpEL ile çalışıyorsanız bu çalışmayacaktır. Bu durumda cast kullanmanız gerekecek.
Raj Shah

12

Bunu yapabilirsin:

SELECT * FROM table WHERE cast(YOUR_INTEGER_VALUE as varchar) = 'string of numbers'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.