【发布时间】:2016-07-12 04:10:53
【问题描述】:
首先,不允许使用任何其他编程语言。
考虑以字符串形式出现的日期mdY,例如1252016(前一个月的字符长度可能为 1 或 2 除外)为 2016 年 1 月 25 日,10252016 为 2016 年 10 月 25 日。
在任何一种情况下,我们都希望月份的子字符串为:
SUBSTRING( "1252016" , 1, 1 ); => 1 或
SUBSTRING( "10252016" , 1, 2 ); => 10.
例如:
CONCAT_WS( "-",
SUBSTRING( "1252016" , -4, 4 ) ,
SUBSTRING( "1252016" , 1, 1 ) ,
SUBSTRING( "1252016" , -6, 2 )
); => "2016-1-25"
有没有办法有条件地从字符串的开头获取1 或2 字符,或者以其他方式从7 位置到字符串开头的负数读取,然后反转它?
无法使用其他编程语言的原因是由于通过LOAD DATA LOCAL INFILE 导入的约会数量。而且据我了解,只能控制查询的结构。
【问题讨论】:
-
1112016的正确结果是什么? 2016 年 11 月 1 日还是 2016 年 1 月 11 日? -
@JoachimIsaksson 它只需将正确的
DATE插入到数据库中。格式是否以mdY或dmY开头无关紧要,因为其中任何一个都有可能将前导d/m的字符长度设为 1 或 2。 -
@JoachimIsaksson 是正确的。在许多情况下,当您有一个七位数字时,您的日期格式本质上是不明确的。按照目前的规定,您的数据导入工作不会成功。如果您可以让您的数据源在 2016 年 12 月 5 日写入
12052016,在 2016 年 1 月 25 日写入01252016,您将有机会完成这项工作。但是,如果您收到1252016,您根本无法辨别两者之间的区别。 -
应该没问题。日期以整数形式出现,仅删除前导零,因此不会出现日期格式的中间部分长度小于 2 的情况。我无法更详细地解释为什么它是这样的,但它只是:P,中间部分将填充零。