I have a Table with coloumnname 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
here description means batchname_expirydate
my question is how do I normalize my description column convert all those dates to DD-MM-YY
format
i have tried this two queries
select substring(description from position('_' in description) +1) from attributesetinstance;
above query will give me all the strings then i tried date conversion like this
select to_date(substring(description from position('_' in description) +1), 'DD-MM-YY') from attributesetinstance;
now this gives me error
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.
how do update/recorrect all my database ?
update:
tried with another 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
i get following error:
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
update
my postgres datestyle
show datestyle;
"ISO, DMY"
This error message is not well - this date 2014-04-31 is invalid. So you cannot to cast this string to date with algorithm, that you used. But to_date function is fault tolerant
This code works
workaround for 8.4: