【问题标题】:Inserting date in the format mdY with pure MYSQL使用纯 MYSQL 以 mdY 格式插入日期
【发布时间】:2016-07-12 04:10:53
【问题描述】:

首先,不允许使用任何其他编程语言。

考虑以字符串形式出现的日期mdY,例如1252016(前一个月的字符长度可能为 1 或 2 除外)为 2016 年 1 月 25 日,10252016 为 2016 年 10 月 25 日。

在任何一种情况下,我们都希望月份的子字符串为: SUBSTRING( "1252016" , 1, 1 ); => 1SUBSTRING( "10252016" , 1, 2 ); => 10.

例如:

CONCAT_WS( "-",
    SUBSTRING( "1252016" , -4, 4 ) , 
    SUBSTRING( "1252016" , 1, 1 ) ,
    SUBSTRING( "1252016" ,  -6, 2 ) 
); => "2016-1-25"

有没有办法有条件地从字符串的开头获取12 字符,或者以其他方式从7 位置到字符串开头的负数读取,然后反转它?

无法使用其他编程语言的原因是由于通过LOAD DATA LOCAL INFILE 导入的约会数量。而且据我了解,只能控制查询的结构。

【问题讨论】:

  • 1112016 的正确结果是什么? 2016 年 11 月 1 日还是 2016 年 1 月 11 日?
  • @JoachimIsaksson 它只需将正确的DATE 插入到数据库中。格式是否以 mdYdmY 开头无关紧要,因为其中任何一个都有可能将前导 d/m 的字符长度设为 1 或 2。
  • @JoachimIsaksson 是正确的。在许多情况下,当您有一个七位数字时,您的日期格式本质上是不明确的。按照目前的规定,您的数据导入工作不会成功。如果您可以让您的数据源在 2016 年 12 月 5 日写入 12052016,在 2016 年 1 月 25 日写入 01252016,您将有机会完成这项工作。但是,如果您收到1252016,您根本无法辨别两者之间的区别。
  • 应该没问题。日期以整数形式出现,仅删除前导零,因此不会出现日期格式的中间部分长度小于 2 的情况。我无法更详细地解释为什么它是这样的,但它只是:P,中间部分将填充零。

标签: mysql substring


【解决方案1】:

用前导零填充字符串,然后使用STR_TO_DATE 函数:

SELECT STR_TO_DATE(LPAD('1252016', 8, '0'), '%m%d%Y');

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2012-02-23
    相关资源
    最近更新 更多