我正在使用具有字符串形式的日期列的数据集。我认为做这样的事情会很简单:
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;
答案 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;