2016-04-05 34 views
0

Yani bir sütunum var, incarceration_date, aslında bir metin alanı ve bunu bir tarih olarak yayınlamak istiyorum. Normalde sorun yok, fakat bu sütundaki her değerin, sonunda tarih fonksiyonunda hata yapmasını sağlayan, sonu olmayan bir boşluk (& # 160) olduğu görülüyor.PostgreSQL'de aralıksız boşlukları bir dizeden nasıl silebilirim?

Bu soruna başarı olmadan iki farklı yaklaşım denedim.

girişimi 1:

trim(both chr(65279) from incarceration_date)::DATE 

girişimi 2: [: alanı:] [] sıfır genişlik kesintisizlik alanı içermez

regexp_replace(incarceration_date, '\s+$', '')::DATE 

ikinci girişim nedeniyle başarısız olduğunu düşünüyorum.

Bu özel örnekte, alanların tümü aynı genişlikte olduğundan, bu soruna geçici olarak yalnızca ilk on karakteri tarih işlevine geçirerek çalışabilirim. Ancak, içe aktarılan verilerde kullandığım bazı genel metin temizleme işlevlerine sahibim ve bu karakteri kullanabilmelerini istiyorum.

"06/17/2011 " 

Ama bunu sorun karakter kopyalar için SO doğru emin değilim:

örnek bir dize buna benzemez.

PostgreSQL-9.5.0 kullanıyorum.

kodlama yoluyla incarceration_date kolon çıkışının bir sıranın çıkış (incarceration_date :: bytea 'heks') grubudur:

30362f31372f32303131c2a0 

tüm satırları c2a0 ile sona erer.

Sunucu kodlaması UTF8'dir. eğer

regexp_replace(incarceration_date, '[0-9/]', '')::DATE 

Alternatif performans için: @ThiefMaster belirtildiği gibi

+1

Sen başka birşey kaldırmak olabilir '[0-9 /]' dize – ThiefMaster

+0

sizi 'kodlamak (incarceration_date :: bytea, 'altıgen')' numune sonucunu verebilir misiniz? – Abelisto

+0

@Abelisto ben soruya bu bilgileri ekledik; ('' gösteri server_encoding) Ayrıca veritabanı kodlamasını sağlar. –

cevap

0

, size alana başka çöp zorunda sadece durumda, rakamlar ve eğik çizgiler daha şey diğer çıkarmadan muhtemelen daha çok işinize Tarihin her zaman DD/MM/YYYY, daha sonra just use left(incarceration_date, 10), hatta incarceration_date::char(10) şeklinde biçimlendirileceğini biliyorsunuzdur.