gpt4 book ai didi

mysql - str_to_date 不起作用

转载 作者:行者123 更新时间:2023-11-29 18:24:07 25 4
gpt4 key购买 nike

专家们,我快疯了...str_to_date 不起作用

mysql> describe product_tbl;
+--------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+----------------+
| product_id | int(11) | NO | PRI | NULL | auto_increment |
| ... | ... | ... | ... | ... | ... |
| expiration_date | text | YES | | NULL | |
+--------------------+-------------+------+-----+---------+----------------+

日期格式为日 01-31 - 月 01-12 - 年 4 位数字

mysql> select expiration_date from product_tbl limit 2;
+-----------------+
| expiration_date |
+-----------------+
| 26-09-2017 |
| 19-09-2017 |
+-----------------+
2 rows in set (0.00 sec)

根据 dev.mysql.com 的文档:

%d -> 一月中的某一天,数字 (00..31)

%m -> 月份,数字 (00..12)

%Y -> 年份,数字,四位数字

但是...

mysql> select STR_TO_DATE(expiration_date, '%d-%m-%Y') from product_tbl limit 2;
+------------------------------------------+
| STR_TO_DATE(expiration_date, '%d-%m-%Y') |
+------------------------------------------+
| NULL |
| NULL |
+------------------------------------------+
2 rows in set, 2 warnings (0.00 sec)

我做错了什么?感谢帮助!

<小时/>

回答您的问题:

无限制:

mysql> select expiration_date, STR_TO_DATE(expiration_date, '%d-%m-%Y') from product_tbl;
+-----------------+------------------------------------------+
| expiration_date | STR_TO_DATE(expiration_date, '%d-%m-%Y') |
+-----------------+------------------------------------------+
| 26-09-2017 | NULL |
| 19-09-2017 | NULL |
| 20-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| 19-09-2017 | NULL |
| ... | ... |

依此类推,直到表格末尾。

另外,

mysql> SELECT STR_TO_DATE(expiration_date, '%d-%m-%Y')
-> FROM product_tbl
-> WHERE expiration_date IS NOT NULL
-> LIMIT 2;
+------------------------------------------+
| STR_TO_DATE(expiration_date, '%d-%m-%Y') |
+------------------------------------------+
| NULL |
| NULL |
+------------------------------------------+
2 rows in set, 2 warnings (0.01 sec)

mysql> SELECT STR_TO_DATE(expiration_date, '%d-%m-%Y')
-> FROM product_tbl
-> ORDER BY expiration_date DESC
-> LIMIT 2;
+------------------------------------------+
| STR_TO_DATE(expiration_date, '%d-%m-%Y') |
+------------------------------------------+
| NULL |
| NULL |
+------------------------------------------+
2 rows in set, 2 warnings (0.00 sec)

顺便说一下,服务器版本是 5.6.37 MySQL Community Server (GPL)

<小时/>

编辑:

mysql> select expiration_date, CAST(expiration_date AS DATE), STR_TO_DATE(expiration_date, '%d-%m-%Y') from product_tbl;
+-----------------+-------------------------------+------------------------------------------+
| expiration_date | CAST(expiration_date AS DATE) | STR_TO_DATE(expiration_date, '%d-%m-%Y') |
+-----------------+-------------------------------+------------------------------------------+
| 26-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 23-09-2017 | NULL | NULL |
| 28-09-2017 | NULL | NULL |
| 27-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |
| 21-09-2017 | NULL | NULL |

我怀疑我的数据库安装有问题,因为在另一台运行 MariaDB 5.5.52 的服务器上正确返回了日期。

我尝试卸载并重新安装 MySQL 服务器,但结果相同。我现在要更改存储库并安装不同的版本。

我会随时通知您。不管怎样,感谢您的支持。

<小时/>

编辑:

只是想让您知道,我删除了 MySQL Community Server 5.6.37 并安装了 MariaDB 10.1.26。现在它就像一个魅力。不确定这是否是 MySQL 的错误,但至少问题解决了。

最佳答案

正如 Strawberry 所提到的,您可能会得到带有 NULL 值的随机记录

LIMIT without ORDER BY is fairly meaningless

您可以使用这些查询检查是否有记录。

SELECT STR_TO_DATE(expiration_date, '%d-%m-%Y') 
FROM product_tbl
WHERE expiration_date IS NOT NULL
LIMIT 2;

或者

SELECT STR_TO_DATE(expiration_date, '%d-%m-%Y') 
FROM product_tbl
ORDER BY expiration_date DESC
LIMIT 2;

关于mysql - str_to_date 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46332197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com