2016-04-06 11 views
0

私はbirthdate属性を含むデータセットを持っています。日付形式はM/D/YYYY(2009年5月8日のような一桁表示)で、テキスト形式で保存されます。今、私は日付に列の種類を変更する必要があります。しかし、部分的な日付を持つ、つまり曜日または日と月のどちらかが欠落しているエンティティ(手動で固定できるもの以上)が多数存在します。例えば:私はto_date(birthdate,'DD/MM/YYYY')を適用するとPostgreSQLはこれらの日付を解析することはできませんのでPostgreSQLで部分日付をキャストする

"//1935" 
"/5/1929" 
"/4/1931" 

は今、私はエラーを取得します。私がしなければならないことは、欠損値をデフォルト値で埋めることです。たとえば、"//1935""/5/1929"はそれぞれ"1/1/1935""1/5/1929"に変換する必要があります。この問題を迅速に解決する方法はありますか?あるいは、正規表現パーサを書く必要がありますか?

+0

あなたはパーサを必要としています。 '/'で始まる場合、 '/ [0-9]'で始まる場合 –

答えて

1

SQL Fiddle Demo

CREATE TABLE product 
    ("inputDate" varchar(9)) 
; 

INSERT INTO product 
    ("inputDate") 
VALUES 
    ('//1935'), 
    ('/5/1929'), 
    ('/4/1931') 
; 

SELECT *, 
     CASE WHEN substr("inputDate", 1, 2) = '//' THEN '1/1/' || substr("inputDate", 3, 10) 
      WHEN substr("inputDate", 1, 1) = '/' THEN '1/' || substr("inputDate", 2, 10) 
      ELSE "inputDate" 
     END as result 
FROM Product; 
+0

、ありがとう!なぜ私はこのシンプルできちんとした解決策を考え出すことができなかったのか分からず、代わりに正規表現の解析などを探していました:) @Juan Carlos Oropeza – Ahmedov