2013-06-12 7 views
8

Dzień dobry wszystkim,Postgres String na bieżąco PRZYKŁAD 10Apr77 do 10/04/1977

Jestem całkiem nowy, PostgreSQL, więc przeprosiny z wyprzedzeniem, jeśli moje pytanie jest poniżej średniej.

Otrzymuję niektóre dane w formacie pliku fsv csv i ładnie wstawiam się do stołu pomostowego, aby wyświetlić podgląd danych. Jedną z rzeczy, z którymi mam problem jest to, że pole danych jest przechowywane jako wartość ciągu. Na przykład: 10Apr96 - 01Jan85

Napisałem poniższe zapytanie, aby sprawdzić, czy można przerwać ciąg znaków i połączyć je ponownie w formacie daty.

Czy jest łatwiejszy sposób osiągnięcia tego, co robię?

select 
concat(cast(substring(datetext,1,2) as varchar(2)),'/',case 
when cast(substring(datetext,3,3) as varchar(3)) = 'Jan' then '01' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Feb' then '02' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Mar' then '03' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Apr' then '04' 
when cast(substring(datetext,3,3) as varchar(3)) = 'May' then '05' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Jun' then '06' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Jul' then '07' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Aug' then '08' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Sep' then '09' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Oct' then '10' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Nov' then '11' 
when cast(substring(datetext,3,3) as varchar(3)) = 'Dec' then '12' 
end,'/',cast(substring(datetext,6,2) as varchar(2))) as dt 
from tbl_loading_horses_tmp 
+1

Dziękujemy za wyświetlenie kodu, którego używasz i niektórych danych, których dotyczy. W przyszłości dobrze jest również wspomnieć o swojej wersji PostgreSQL, ale dzięki za wysiłek wyjaśnienia się wyraźnie +1. –

Odpowiedz

10

Można użyć the to_date() function, która pobiera ciąg formatu, jak interpretować dane wejściowe i zwraca wartość date która jest co należy przechowywać w DB.

 
SELECT to_date('10Apr96', 'DDMonYY'); 
    to_date 
------------ 
1996-04-10 
(1 row) 

Aby przekonwertować z powrotem na ciąg w innym formacie przy pobieraniu na wyświetlaczu, należy użyć funkcji to_char() udokumentowany na tej samej stronie.

+1

Dodałem trochę więcej wyjaśnień i link do dokumentacji, ale to z pewnością właściwe podejście. – IMSoP

Powiązane problemy