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
。