我有一个表格,其中mydate以YYYY-MM-DD格式存储在字符变化列中。此列中的某些行对于此列为空。我想格式化日期如下:
SELECT to_char(date mydate, 'FMDay FMDD FMMonth FMYYYY')
FROM my_table where mydate is not null limit 10;
但是我收到以下错误:ERROR: syntax error at or near "mydate"
LINE 1: select to_char(date mydate, 'FMDay FMDD FMMonth FMYYY...
为什么会这样。
答案 0 :(得分:0)
您需要先将varchar值转换为日期值,以便将其转换回格式化的varchar。
您需要删除列名前面的date
关键字。仅当您编写日期常量(“文字”)时才需要date
关键字,而不是在引用列时。
varchar
列cal的“空”也意味着它包含一个空字符串(''
),所以你还需要在where子句中处理它(你不会如果您将日期存储在正确的date
列中
select to_char(to_date(mydate, 'YYYY-MM-DD'), 'FMDay FMDD FMMonth FMYYYY')
from my_table
where mydate is not null
and mydate <> '' --<< exclude empty strings as well
limit 10;
由于您的值已经是ISO格式,您可以使用以下方法缩短这一点:
to_char(mydate::date, 'FMDay FMDD FMMonth FMYYYY')
但您应该不在varchar
列中存储日期。您应该将其存储在DATE
列中。