如何将YYYY-MM-DD日期字段转为Mon-YY格式并保留日期类型?
日期格式转换(保留日期类型)解决方案
首先明确:日期字段类型本身不存储显示格式,它只存储底层的时间/日期值。你要的Mon-YY是显示层面的格式,若想保留日期类型,本质是保留该日期所在月份的时间锚点(通常取当月第一天),之后可通过客户端工具或数据库函数控制显示格式;如果只是需要Mon-YY格式的输出,也可以直接生成对应字符串(但这会是字符串类型)。
以下分主流数据库给出具体方案:
MySQL
- 保留日期类型(得到当月第一天的DATE类型值):
SELECT DATE_FORMAT(date_col, '%Y-%m-01') AS month_start FROM your_table;
这个结果是DATE类型,客户端显示时可设置格式为Mon-YY;若要直接输出Mon-YY格式的字符串:
SELECT DATE_FORMAT(date_col, '%b-%y') AS formatted_date FROM your_table;
PostgreSQL
- 保留日期类型(截断到当月第一天):
SELECT date_trunc('month', date_col)::date AS month_start FROM your_table;
- 直接输出
Mon-YY格式的字符串:
SELECT to_char(date_col, 'Mon-YY') AS formatted_date FROM your_table;
SQL Server
- 保留日期类型(构造当月第一天的日期):
SELECT DATEFROMPARTS(YEAR(date_col), MONTH(date_col), 1) AS month_start FROM your_table;
- 直接输出
Mon-YY格式的字符串:
SELECT FORMAT(date_col, 'MMM-yy') AS formatted_date FROM your_table;
关于你之前的错误
你用to_date(monthname(Date) || ' ' || year(Date))报错,是因为to_date()需要明确指定输入字符串的格式匹配规则。比如在MySQL里应该写成:
SELECT STR_TO_DATE(monthname(date_col) || ' ' || year(date_col), '%M %Y') FROM your_table;
但这种写法绕了弯路,直接用上面的内置日期函数更简洁高效。
内容的提问来源于stack exchange,提问作者redwytnblakII
相关产品推荐
相关产品推荐

