如何将“YYYYMM”格式转换为“YYYY-MM-00”?
Posted
技术标签:
【中文标题】如何将“YYYYMM”格式转换为“YYYY-MM-00”?【英文标题】:How to convert "YYYYMM" format to "YYYY-MM-00"? 【发布时间】:2020-10-06 19:34:11 【问题描述】:我在 mysql 中有一个示例表
id yearmonth
1 202001
2 202002
3 202011
4 202012
5 201912
6 201911
mysql中想要的表是
id yearmonth
1 2020-01-00
2 2020-02-00
3 2020-11-00
4 2020-12-00
5 2019-12-00
6 2019-11-00
由于第一张表的年月列中没有日值,我们可以用默认值替换。
寻求您的帮助!提前致谢!
【问题讨论】:
00
在 DATE 的数据类型值 DAY 部分不正确。您希望最终值具有字符串数据类型吗?
不,我正在寻找 date_format。不是字符串格式。
这些日期无效,该月没有第 0 天。
是的,但我只是将这一天作为默认一天。我并没有真正在任何地方使用它。我可以用01代替00,我只是在寻找转换成YYYY-MM-DD格式的方法。
我可以用 01 替换 00。 如果你想有稳定的解决方案,你必须。例如,SELECT CAST(yearmonth*100+1 AS DATE) ...
【参考方案1】:
您也可以使用STR_TO_DATE
函数。
SELECT STR_TO_DATE('202001','%Y%m');
Output:
2020-01-00
如果您想将day
设置为默认值。只需使用DATE_FORMAT
。
SELECT DATE_FORMAT(STR_TO_DATE('202001','%Y%m'), '%Y-%m-01');
Output:
2020-01-01
正如@Akina 提到的,它依赖于NO_ZERO_IN_DATE
并可能导致null
结果。你可以寻找这个替代方案
SELECT CONCAT(LEFT('202010',4) , '-' , RIGHT('202010',2) , '-01');
如果你想要date
类型,那么你可以使用CAST
显式。
SELECT CAST( CONCAT(LEFT('202010',4) , '-' , RIGHT('202010',2) , '-01') AS DATE);
【讨论】:
fiddle 不同意你的意见...两个查询都返回 NULL。 它在我的本地运行得很好,让我也检查一下你的小提琴。 您的查询有效性取决于服务器的 SQL 模式 - 即它通常是无效的。因为任何服务器设置更改都可能会终止应用程序,并且恢复可能非常昂贵。 @NikhilGarakapati 那是你的选择......和你的耙子。 NO_ZERO_IN_DATE,更准确地说。【参考方案2】:如何将 yearmonth 列数据值与您想要的默认日期值连接,然后使用 STR_TO_DATE
更改为日期格式:
SELECT STR_TO_DATE(CONCAT(yearmonth,'01'), '%Y%m%d') FROM test;
或者使用DATE_FORMAT
:
SELECT DATE_FORMAT(CONCAT(yearmonth,'01'), '%Y-%m-%d') FROM test;
Fiddle
【讨论】:
以上是关于如何将“YYYYMM”格式转换为“YYYY-MM-00”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中将 yyyymm 数据格式解析为 Month、YYYY 格式?
如何使用 Big Query SQL Standard 将日期 YYYY-MM-DD 转换为字符串 YYYYMM?