mysql中date date列的当前月份数据

时间:2017-07-13 13:49:28

标签: mysql sql stored-procedures

我正在尝试使用日期数据类型列从mysql表中检索当前月份的数据。 这是我的查询,不返回任何内容

SELECT *
  FROM `overview` AS s1 INNER JOIN
       `payments` AS s2 ON s1.Booking_id = s2.Booking_id
 WHERE YEAR(s1.Booking_date) = YEAR(CURDATE()) 
   AND MONTH(s1.Booking_date) = MONTH(CURDATE());
First table :**overview**
S_no          Int (auto increment) Primary Key
Booking_id    varchar
Booking_Date  Date(YYYY-mm-dd)
**Second table**
Booking_id  Primary Key
price       int

如果有人能为上述代码提供存储过程,我将非常感激。

4 个答案:

答案 0 :(得分:0)

这个查询是否会为您返回任何内容?

    SELECT
      *
    FROM
      `overview` AS s1
    INNER JOIN
      `payments` AS s2
    ON
      s1.id = s2.id

两个独立的表具有相同的主键是不寻常的。通常在执行表连接时使用外键。您的日期逻辑是否可能正确,但查询的主要部分是错误的?我只是猜测,因为我不知道你的数据库架构。

答案 1 :(得分:0)

您与payments表的加入是错误的。正确的查询如下。您需要使用正确的列名替换s2.overview_id

SELECT *
  FROM `overview` AS s1 INNER JOIN
       `payments` AS s2 ON s1.id = s2.overview_id
 WHERE YEAR(s1.king_date) = YEAR(CURDATE()) 
   AND MONTH(s1.king_date) = MONTH(CURDATE());

使用此功能,您可以创建如下存储过程:

CREATE PROCEDURE `spName`()
    BEGIN
    SELECT *
  FROM `overview` AS s1 INNER JOIN
       `payments` AS s2 ON s1.id = s2.overview_id
 WHERE YEAR(s1.king_date) = YEAR(CURDATE()) 
   AND MONTH(s1.king_date) = MONTH(CURDATE());
    END

答案 2 :(得分:0)

对于创建存储过程:

DELIMITER $$
CREATE PROCEDURE GetPaymentsofCurrentMonth()
   BEGIN
     SELECT *
     FROM `overview` AS s1 INNER JOIN
       `payments` AS s2 ON s1.id = s2.id
     WHERE YEAR(s1.king_date) = YEAR(CURDATE()) 
     AND MONTH(s1.king_date) = MONTH(CURDATE());
   END 

调用存储过程:

CALL GetPaymentsofCurrentMonth();

答案 3 :(得分:0)

我终于解决了这个问题。我的查询是正确的,问题是由于Excel数据导入而随机保留的数据列。我纠正了。现在它的工作正常。通过将自定义单元格属性转换为excel文件中的文本。