私は列名を持つテーブルを持っていますdescription
description //character varying
LZ000834_28-02-14
LZ000834_28-02-14
LA20683_30-04-15
LA20683_30-04-15
LA20300_31-01-15
LA20300_31-01-2015
LA20264_31-01-15
LA20264_31-01-2016
LAN2078_31-03-16
LAN2078_31-03-15
LAN8394_31-04-14
L2Z82736_31_03_2015 //has 1million rows
ここでの説明は、batchname_expirydate を意味します
私の質問は、説明列を正規化してこれらすべての日付をDD-MM-YY
フォーマットに変換する方法です
私はこの2つのクエリを試しました
select substring(description from position('_' in description) +1) from attributesetinstance;
上記のクエリですべての文字列が得られるので、このような日付変換を試みました
select to_date(substring(description from position('_' in description) +1), 'DD-MM-YY') from attributesetinstance;
今、これは私にエラーを与えます
ERROR: invalid value "_3" for "DD"
DETAIL: Value must be an integer.
********** Error **********
ERROR: invalid value "_3" for "DD"
SQL state: 22007
Detail: Value must be an integer.
すべてのデータベースを更新/再修正するにはどうすればよいですか?
アップデート:
別のSQLで試しました
with product_dates AS (
select description, ((val[2])||'-'||val[3]||'-'||val[4])::date as expir_date
from (
select description,regexp_matches(description, '([a-zA-Z0-9]+)_([0-9]+)[-_]([0-9]+)[-_]([0-9]+)') as val
from attributesetinstance
) a
), expiring_dates AS (
select description from product_dates
)
select description from expiring_dates
次のエラーが表示されます:
ERROR: date/time field value out of range: "31-04-14"
********** Error **********
ERROR: date/time field value out of range: "31-04-14"
SQL state: 22008
アップデート
私のポストグルデートスタイル
show datestyle;
"ISO, DMY"