【问题标题】:str_to_date returns null+mysqlstr_to_date 返回 null+mysql
【发布时间】:2017-03-16 17:08:50
【问题描述】:

当我尝试将 varchar 转换为日期时,我得到 Null 值作为回报。

我的专栏中有 05-MAR-2015 的值。

我正在运行以下查询。

select STR_TO_DATE('n.Invoice_date','%d-%c-Y') from table n;

一旦我运行上面的查询,我就会得到空值作为回报。

我想介绍一个日期格式的新列。

【问题讨论】:

  • 你在Y之前忘记了%,格式化器应该是'%d-%b-%Y'
  • Invoice_date 列中的字符串格式到底是什么?

标签: mysql str-to-date


【解决方案1】:

请注意,文字字符串'n.invoice_date' 不是有效日期。你的意思是:

SELECT STR_TO_DATE(n.invoice_date, '%d-%b-%Y') FROM TABLE n

【讨论】:

  • 我尝试在 MYSQL 上执行 SELECT STR_TO_DATE('05-MAR-2015','%d-%c-%Y'); 但这不起作用。也许它不是有效日期?
  • 感谢您的回复。是的,你是对的。我什至需要那里的别名吗?
  • n. 部分可以省略,是的。
  • 这取决于您的 invoice_date 字段中是否包含有效日期。你有任何错误吗? “不起作用”可能是对问题最没用的描述。
  • 如果你仔细看date formatting options你会发现%c是不正确的,你想要的是%b。请下次提供一些示例数据,以便其他人可以重现您的问题,而不必猜测您想要什么。这样可以省去很多挫败感。
【解决方案2】:

您的错误在于使用%c 而不是%b 来获取日期。您将日期格式与日期值的创建混合在一起。应该这样做:

SELECT DATE_FORMAT(STR_TO_DATE(n.invoice_date,'%d-%b-%Y'), '%d-%c-%Y') FROM table n;

这会导致:05-3-2015

在这里,您首先使用STR_TO_DATE 创建一个日期,该日期必须与字段中存储的格式相匹配。然后你可以用DATE_FORMAT按照你想要的方式格式化它。

有关更多信息,请参阅 MYSQL 文档:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

【讨论】:

  • 非常感谢您的评论。我使用了以下查询 - SELECT str_to_date(lower(Invoice_date),'%d-%b-%Y') from dw.spend_nordic;
猜你喜欢
  • 2017-05-26
  • 2015-01-07
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多