Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 特定字符串日期的所有列名之和_Mysql - Fatal编程技术网

Mysql 特定字符串日期的所有列名之和

Mysql 特定字符串日期的所有列名之和,mysql,Mysql,我有一个表格,我想在其中得到某一列在特定日期的总价格。日期是字符串(例如:2018年1月)。我尝试的是将字符串转换为日期 SELECT SUM(price_amount) as 'total_paid', STR_TO_DATE(CONCAT('01 ',price_month), "%M %d %Y") as dates FROM user_prices WHERE price_type = 'cash' AND price_month >= DATE('January

我有一个表格,我想在其中得到某一列在特定日期的总价格。日期是字符串
(例如:2018年1月)
。我尝试的是将字符串转换为日期

SELECT
    SUM(price_amount) as 'total_paid',
    STR_TO_DATE(CONCAT('01 ',price_month), "%M %d %Y") as dates
FROM user_prices
WHERE price_type = 'cash' AND price_month >= DATE('January 01 2018')
GROUP BY price_month
ORDER BY price_month DESC;
此操作的结果为空。我只需要得到表中日期等于或大于2018年1月1日的每个现有月份的总和。并按月进行分组

email          price_amount      price_month     price_type    date_added
1@gmail.com     200              April 2017      cash          ---
19@gmail.com    400              December 2017   cash          ---
12@gmail.com    100              January 2018    cash          ---
123@gmail.com   230              January 2018    cash          ---
1234@gmail.com  250              January 2018    credit        ---
321@gmail.com   200              April 2018      cash          ---
32@gmail.com    120              March 2018      cash          ---
因此,上述示例应显示以下预期结果:

price_month     total_paid
March 2018      120
April 2018      200
January 2018    330

如果
price\u month
列实际上是您向我们显示的文本,那么您需要使用
STR\u to\u DATE
来进行此查询。请注意,
STR_TO_DATE
至少需要年、月和日信息才能生成日期。因此,在下面的查询中,我任意构建了发生在每月第一个月的每个月-年数据

SELECT
    price_month,
    SUM(price_amount) AS total_paid
FROM user_prices
WHERE
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y') >= '2018-01-01' AND
    price_type = 'cash'
GROUP BY
    price_month,
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y')
ORDER BY
    STR_TO_DATE(CONCAT('01 ', price_month), '%d %M %Y');


前进,请不要像这样将日期存储为文本。通常,您可能会假设每次在MySQL查询中使用
STR\u to\u DATE
时小狗都会被碾死。

price\u month
列实际上是文本,还是您只是以这种方式显示这些日期?将日期存储为日期。然后返回给我们。@TimBiegeleisen它是一个文本-varchar您的连接创建了一个模式'd M Y';对于转换,您指定'mdy'(并且您使用了错误的引号类型)-您需要使用匹配模式。如果我将列类型更改为
date
是否会更改保存在数据库中的值?@xkev是和否。如果您使用的是真正的日期,您绝对应该这样做,您将不再存储实际的月份名称。但是,您可以使用
DATE\u FORMAT
轻松地再次生成这些数据,这是另一种方式,并使用日期生成字符串输出。底线是,您应该避免像这样存储日期。将
2018年1月
存储为日期,而不是
2018-01-01