我需要使用Postgresql转换TEXT值看起来像这样的记录:
26-AUG-2015
to:
2015-08-26
我不确定供应商服务器上存在哪个版本的Postgresql,但我尝试使用以下命令执行select语句:
SELECT to_char(sle.log_field1, 'YYYY-MM-DD')
FROM student_log_entires sle;
但是我收到了这个错误:
Error: SQL Error: SQLSTATE[42883]: Undefined function: 7 ERROR: function to_char(text, unknown) does not exist LINE 25: AND to_char(sle.log_field1, 'YYYY-MM-DD') >=... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.
我也尝试过:
SELECT to_date(sle.log_field1, 'YYYY-MM-DD')
FROM student_log_entries sle
但我收到了这个错误:
Error: SQL Error: SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid value "[E] " for "YYYY" DETAIL: Value must be an integer. Query: SELECT to_date(sle.log_field1, 'YYYY-MM-DD') FROM student_log_entries sle
任何建议/方向将不胜感激。感谢。
答案 0 :(得分:2)
这假定lc_time
设置为英语:
SELECT to_char(to_date('26-AUG-2015', 'DD-MON-YYYY'), 'YYYY-MM-DD');
to_char
------------
2015-08-26
(1 row)
答案 1 :(得分:1)
您可以将值转换为日期,然后再转换回字符串:
select to_char(to_date('26-AUG-2015', 'DD-MON-YYYY'), 'YYYY-MM-DD')
在许多情况下,将值作为日期处理可能就足够了。
您的方法不起作用,因为该值显然已经存储为字符串,因此将其转换回具有日期格式的字符串并不合理。
编辑:
您可以使用简单的正则表达式:
select (case when col ~ '^[0-9]{2}[-][A-Z]{3}[-][0-9]{4}$'
then to_char(to_date('26-AUG-2015', 'DD-MON-YYYY'), 'YYYY-MM-DD')
end)
当然,如果格式错误更加微妙,那么就需要更复杂的正则表达式。
答案 2 :(得分:0)
尝试一下
SELECT to_char(sle.log_field1, 'YYYY-MM-DD') FROM student_log_entires sale;