mysql - 使用日期格式的 INSERT ... SELECT

标签 mysql sql database

我在 MySQL 中使用 INSERT ... SELECT 查询。现在,在我的数据库中有一个名为“medDate”的列,我将其用于我的药品库存应用程序。它的类型为 Varchar,格式为“July 2014”。现在我想使用 insert...select 查询来复制上个月的记录。但当我测试对 MySQL 的查询时,出现错误,指出日期时间值不正确。你能帮我解决这个问题吗?这是我的查询。

INSERT INTO medicinesinventory (itemName, compCode, classID, 
 medDate, price, beginningIn, newIn, 
 outMed, sales) SELECT DISTINCT(itemName), 
 compCode, classID, CURDATE(), 
 price, 0.0, 0, 0.0, 0.0 
 FROM medicinesinventory 
 WHERE YEAR(medDate) = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y') 
 AND MONTH(medDate) = DATE_FORMAT(CURRENT_DATE  - INTERVAL 1 MONTH,  '%M %Y');

样本数据

compCode medID classID medDate   itemname  price beginningIn newIn outMed sales
GOLDEN     148   20    July 2014 sample    0.00   0          0.00   0.00    6.00

最佳答案

函数year()month()需要日期。您可以使用 str_to_date() 获取日期,因为 MySQL 支持“部分”日期(即没有日期的日期。因此,请尝试以下操作:

WHERE YEAR(str_to_date(meddate, '%M %Y')) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND
      MONTH(str_to_date(meddate, '%M %Y')) = MONTH(CURRENT_DATE  - INTERVAL 1 MONTH)

或者,您似乎想以相同的格式格式化上个月并进行比较。这也可以工作:

WHERE medDate = DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%M %Y') 

关于mysql - 使用日期格式的 INSERT ... SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125861/

相关文章:

python - 使用Impala选择带有通配符模式的多个表并将其连接

mysql - 使用数据库 : E-commerce website 时的最佳实践

sql - Forking(postgreSQL数据库结构

MySQL - 无法创建/写入文件错误

sql - 查询需要很长时间

mysql - 在CloudVPS中创建数据库

sql - 为什么这个 PL/SQL 函数无法编译?

php - 根据字段值传递数据库字段 ID 的运行 SQL

mysql - 如何创建 MySQL 数据库

php - 将 MySQL 表值分配给变量的更简单方法