【问题标题】:SQL date format convert? [dd.mm.yy to YYYY-MM-DD]SQL日期格式转换? [dd.mm.yy 到 YYYY-MM-DD]
【发布时间】:2013-09-06 23:16:08
【问题描述】:

是否有 mySQL 函数将日期从格式 dd.mm.yy 转换为 YYYY-MM-DD?

例如,03.09.13 -> 2013-09-03

【问题讨论】:

  • 您的输入是日期类型,还是字面意思为 03.09.13 的字符串?
  • @ppeterka66 是的,在这里问可能意味着我没有找到/理解这个答案。
  • @EdGibbs 这是一个字符串。
  • 将您的字符串转换为日期,然后再转换回新格式的字符串。
  • @user2216190 :简单的答案是否定的。我想如果你为正则表达式安装了一些 UDF 库,你可以通过正则表达式匹配和编造一个新的日期字符串来做一些超越顶部的事情。您最好使用动态语言来预处理日期。你在用 PHP 吗?

标签: mysql sql date format sql-function


【解决方案1】:

由于您的输入是03.09.13 形式的字符串,我假设(因为今天是2013 年9 月3 日)它是dd.mm.yy。您可以使用STR_TO_DATE 将其转换为日期:

STR_TO_DATE(myVal, '%d.%m.%y')

然后您可以使用DATE_FORMAT 将其格式化回字符串:

DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%y'), '%Y-%m-%d')

请注意,STR_TO_DATE 中的年份为 %y(小写“y”),DATE_FORMAT 中的年份为 %Y(大写“Y”)。小写的版本是两位数的年份,大写的版本是四位数的年份。

【讨论】:

  • DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%Y'), '%Y-%m-%d') Y 是大写字母
  • Rajavel - 第一个是小写的y,因为输入字符串有一个两位数的年份(03.09.13)。在第二个中,它是大写的,因此输出将是一个 4 位数的年份 (2013-09-03)。
【解决方案2】:

使用

SELECT CONCAT(
'20',
SUBSTR('03.09.13', 7, 2),
'-',
SUBSTR('03.09.13', 4, 2),
'-',
SUBSTR('03.09.13', 1, 2))

小提琴demo.

有关格式的更多信息,您可以在相应的manual page 中阅读。 提示:如果这是关于非日期时间字段的转换值 - 最好改用 DATE/DATETIME 数据类型。但是,通过字符串函数对日期进行操作是一个坏主意。上面STR_TO_DATE 有一个很好的技巧(不再重复该代码,更新以更好地适应)

【讨论】:

  • 不起作用,DATE_FORMAT 无论如何都要求输入日期为 Y-m-d 格式。您的查询(如果您运行它)将返回 2003-09-13,显然不正确
  • 将我的投票恢复为赞成票,纯粹是因为我没有想到这种方式。不是我个人推荐的东西(我相信你也不会),但考虑到他的独特要求,似乎是唯一的方法。
  • @Lee - 是的,我不同意这种获得结果的方法,但同时它也适合 OP。我真的不明白为什么人们使用字符串日期类型作为日期。
  • @AlmaDoMundo 这是要解决的问题之一 :)
  • 我的要求是将字符串 dd-mm-yy 转换为 dd-mm-yyyy。我将上面的代码修改为如下SELECT CONCAT( SUBSTR('03.09.13', 1, 2), '-', SUBSTR('03.09.13', 4, 2), '-', '20', SUBSTR('03.09.13', 7, 2))
【解决方案3】:

日期使用内部格式存储。您可以使用函数date_format() 将其转换为使用多种格式的字符串。特别适合您的:

select date_format(`date`, '%Y-%m-%d')

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2016-01-02
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多