如何在MySQL的str_to_date函数中添加几天?

4

我有一个表格,在其中有一个字符串日期是以 01.04.2015 的格式呈现。现在我想要在这个字符串日期格式的列中添加一些天数。为此,我编写了以下查询来添加一些天数。

SELECT DATE_ADD(level2,INTERVAL 28 DAY) level2 FROM  sales_purchase_stocks_hs WHERE stock= '123'

当我运行这个查询时,我得到了错误的日期输出。输出结果是2001-05-18 15:00:00。但我的原始日期字符串是01.04.2015(2015年4月1日)。
我尝试使用以下查询:
SELECT STR_TO_DATE(DATE_ADD(level2,INTERVAL 28 DAY),'%d.%m.%Y') level2 FROM  sales_purchase_stocks_hs WHERE stock = '123'.

但是当我运行查询时,结果返回null。请问有人可以帮助我找到错误所在吗?


帮助糟糕的设计是很困难的。始终以规范形式存储日期。按照用户想要的格式输出它们(每种语言都有日期格式化函数)。这是良好编程的真理。(请原谅我太过自大。) - BaseZen
2个回答

6

你做错了。需要先使用str_to_date将字符串日期转换为真实日期,然后再对其应用date_add()

str_to_date的工作原理如下:

mysql> select str_to_date('01.04.2015','%d.%m.%Y') as date;
+------------+
| date       |
+------------+
| 2015-04-01 |
+------------+
1 row in set (0.00 sec)

现在将以上内容放在date_add()中,形成如下结果:
mysql> select date_add(str_to_date('01.04.2015','%d.%m.%Y'),interval 28 day) as date;
+------------+
| date       |
+------------+
| 2015-04-29 |
+------------+
1 row in set (0.00 sec)

您现在可以在查询中使用上述内容。

你好,能否请您看一下这个问题?如何告诉MySQL在处理时跳过空或null列? - user3408779

1
SELECT DATE_ADD(`your_field_name`, INTERVAL 28 DAY)....

例如,我在这里添加了10天,
mysql> select date_start from date_of_join where id = 23 ;
+------------+
| date_start |
+------------+
| 2012-02-03 |
+------------+
1 row in set (0.00 sec)

mysql> SELECT DATE_ADD(`date_start`, INTERVAL 10 DAY) from date_of_join where id = 23 ;
+-----------------------------------------+
| DATE_ADD(`date_start`, INTERVAL 10 DAY) |
+-----------------------------------------+
| 2012-02-13                              |
+-----------------------------------------+
1 row in set (0.00 sec)

这是一个问题吗?还是一个答案?如果是一个答案,请解释为什么他们应该尝试这个。 - CodeGodie
我想解释一下,即使没有使用str_to_date函数,DATE_ADD函数也能够正常工作。请看下面我的回答中的例子,如果字段类型是日期,则可以正常工作。'yyyy-mm-dd' - mysqlrockstar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接