将不一致的字符串转换为日期

时间:2016-04-06 03:33:42

标签: postgresql

我正在使用具有字符串形式的日期列的数据集。我认为做这样的事情会很简单:

Dragon.cpp

date_of_birth的格式为DD / MM / YYYY,类型为' text'

然而,我偶然发现了一些你有

等信息的疯狂案例

to_date(date_of_birth,'YYYY-01-01')

另一个案例是:

//1980

当我运行我的解决方案时,收到以下错误:

0/0/1980

我的目标实际上只是收集年份,因为这至少是一致的。你如何用Postgres处理这类案件?

编辑:

将其切换为以下内容:

ERROR:  invalid value "//19" for "YYYY"
DETAIL:  Value must be an integer.

我的疑问是:

to_date(date_of_birth,'01/01/YYYY')

结果如下:

SELECT to_date(date_of_birth,'01/01/YYYY') AS year, COUNT(*) AS yearTotal FROM student WHERE date_of_birth LIKE '%/%/1980' GROUP BY year;

2 个答案:

答案 0 :(得分:0)

通过操纵日期信息(类型为字符串)到' YYYY'为了通过date_part访问适当的信息。

使用PostgreSQL"对"功能,我能够从格式" DD / MM / YYYY"中收集年份,其中右(' 10/12 / 2013',4)将返回& #39; 2013'

我的查询如下:

SELECT date_part('year', to_date(right(date_of_birth,4),'YYYY')) AS year, COUNT(*) AS total FROM student GROUP BY year

我能解决问题的另一种方法是通过正则表达式来确保我只使用“有效”'日期陈述。 (使用Python正则表达式作为示例):

regexp_matches(date_of_birth, '.\/.\/\d{4}')

答案 1 :(得分:-1)

尝试TO_CHAR而不是TO_DATE,它对我有用

SELECT replace(date_of_birth,'//','') AS year, COUNT(*) AS yearTotal FROM student GROUP BY year;