【问题标题】:MySQL STR_TO_DATE ends as a "0" (zero)MySQL STR_TO_DATE 以“0”(零)结尾
【发布时间】:2014-12-01 13:48:12
【问题描述】:

SELECT STR_TO_DATE('1.1.2000 0:00:00','%e.%c.%Y') 最终会变成 2000-01-01

但是当我试图通过运行对具有值1.1.2000 0:00:00 的列执行相同操作时

SELECT 
FirstDisplayedDate,
FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')
FROM product

我将在每一行中得到零(不是 NULL!)。

我做错了什么? :(

【问题讨论】:

    标签: mysql zero str-to-date


    【解决方案1】:

    你得到你所写的:FirstDisplayedDate = STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y')FirstDisplayedDateSTR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') 进行比较,如果它们不相等则返回零。我想你想在这里使用别名:

    SELECT 
      FirstDisplayedDate,
      STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS FirstDisplayedDate2
    FROM product
    

    【讨论】:

      【解决方案2】:

      STR_TO_DATE() 函数是DATE_FORMAT() 函数的。它需要一个字符串str 和一个格式字符串格式。

      STR_TO_DATE() 如果格式字符串包含 both 日期和时间部分,则返回 DATETIME 值;如果字符串包含 only,则返回 DATETIME 值strong> 日期或时间部分。

      如果从str 中提取的日期、时间或日期时间值非法,则STR_TO_DATE() 返回NULL 并产生警告。

      服务器扫描str 尝试以匹配格式。格式字符串可以包含文字字符和以% 开头的格式说明符。 必须 格式的文字字符与str 中的文字完全匹配。 必须格式的格式说明符与str 中的日期或时间部分匹配。

      而且,得到零的原因是未指定的日期或时间部分的值是 0,因此str 中未完全指定的值会产生设置部分或全部部分的结果为 0,例如:

      mysql> SELECT STR_TO_DATE('abc','abc');
                  -> '0000-00-00'
      mysql> SELECT STR_TO_DATE('9','%m');
              -> '0000-09-00'
      mysql> SELECT STR_TO_DATE('9','%s');
              -> '00:00:09'
      

      检查您的查询使用哪种格式进行日期/时间匹配,并确保您的数据库行包含字符串,这些字符串可以转换为日期,并且不要将函数的输出值分配给相同的数据库字段:

      SELECT 
        FirstDisplayedDate,
        STR_TO_DATE(FirstDisplayedDate,'%e.%c.%Y') AS Converted
      FROM product
      

      Herehere 是更多关于如何正确使用该功能的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多