2011-07-09 12 views
6

Bayt alanı olan bir tablom var ve komut satırı (veya pgAdmin'in sorgu yürütücüsü) aracılığıyla sorgulama yapabilmem uygun olurdu. Onaltılık değer bir string olarak var. Hex'i bytea'ya dönüştürmek için yerleşik bir işlev var mı?Komut satırı aracılığıyla postgres'te sorgu alan adı

ben böyle bir şey yapmak istiyorum:

'fa26e312' İstediğim bytea alanının onaltılık değerini olan
SELECT * FROM table WHERE my_bytea_field=some_???_function('fa26e312'); 

.

Not: Bu sadece bir şeyler geliştirirken/hata ayıkladığım sırada yardımcı olmak için kod aracılığıyla yapabilirim ancak bir sorguda el ile yapabilmek istiyorum.

+1

yeni (9.0 +) ["hex" biçimi "] (http://www.postgresql.org/docs/current/static/datatype-binary.html#AEN5037) sizin için çalışmıyor mu? –

+0

8.4 üzerinde koşuyorum –

cevap

4

Yerleşik decode(string text, type text) işlevini kullanmayı deneyin (bytea döndürür). Sen etkileşimli olmayan modda psql kullanarak CLI üzerinden sorgulama yapabilirsiniz ki (isterseniz bazı biçimlendirme seçenekleri vardır) -c anahtarı ile geçerli:

psql -c "SELECT * FROM table WHERE my_bytea_field=decode('fa26e312', 'hex');" 

Örnek: Sadece

CREATE TABLE test(id serial, my_bytea_field bytea); 
INSERT INTO test (my_bytea_field) VALUES 
    (E'\\320\\170'::bytea), 
    (E'\\100\\070'::bytea), 
    (E'\\377\\377'::bytea); 

psql -tc "SELECT * FROM test WHERE my_bytea_field=decode('ffff', 'hex');" 
    3 | \377\377 
0
SELECT * FROM table WHERE my_bytea_field=E'\\xfa26e312'; 

Binary Data Types dokümanlar örnekte olduğu gibi, (E '\\ x' öneki dikkat edin):

SELECT E'\\xDEADBEEF'; 
İlgili konular