【问题标题】:How to convert "YYYYMM" format to "YYYY-MM-00"?如何将“YYYYMM”格式转换为“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) ...

标签: mysql sql 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

【讨论】:

    猜你喜欢
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2016-09-24
    • 2019-05-09
    • 2016-01-30
    • 2018-08-11
    相关资源
    最近更新 更多