我根据其他帖子尝试了各种建议,但没有用。
我有一个带有Created_Date
密钥的记录数据库方案,而值为01/01/2017
我正在尝试查询数据库记录,以便返回每月有多少条记录以及与哪个月相符的返回计数。
使用以下
SELECT SQL_NO_CACHE MONTH(`Created_Date`), COUNT(*)
FROM `CRM_Leads`
GROUP BY MONTH(`Created_Date`)
我回来了
MONTH(`Created_Date`) COUNT(*)
NULL 872
我还尝试了以下帖子中的几乎所有变体
Count records for every month in a year
任何帮助都将不胜感激。
答案 0 :(得分:3)
假设您的created_date是一个格式字符串(' dd-mm-yyyy'),您应该使用str_to_date将其转换为日期
SELECT SQL_NO_CACHE MONTH(str_to_date(`Created_Date`, '%d/%m/%Y')), COUNT(*)
FROM `CRM_Leads`
GROUP BY MONTH(str_to_date(`Created_Date`, '%d/%m/%Y'))
答案 1 :(得分:0)
只要您将日期/时间信息存储为字符串,您将很难使用任何日期/时间特定的功能和功能。如果您从MONTH(str_to_date(
Created_Date , '%d/%m/%Y'))
获取NULL,则str_to_date
不会将字符串转换为日期,最可能的原因是d m y
&# 34;模式"是不正确的。
你所有关于你的" 字符串可能是日期"是其中一个是这样的:01/01/2017
。现在可能是DD/MM/YYYY
或MM/DD/YYYY
,我们根据您选择与我们分享的单一值无法确定哪一个是正确的。 在您的数据中查找大于12 的任何日期值,例如17/01/2017 ==> DD/MM/YYYY
或 01/17/2017 ==> MM/DD/YYYY
一旦你选择了哪个模式你的" 字符串可能是日期"跟随;在str_to_date()函数中应用该模式。你很想尝试一些不同的模式来获得最好的模式(这些只是你可以尝试的3种):
# which pattern is best for you?
SELECT Created_Date
, str_to_date(`Created_Date`, '%d/%m/%Y') "d/m/y"
, str_to_date(`Created_Date`, '%m/%d/%Y') "m/d/y"
, str_to_date(`Created_Date`, '%Y-%m-%d') "y-m-d"
FROM `CRM_Leads`
在您选择最合适的d m y
模式以应用于str_to_date函数之前,您将无法通过查询获得成功。请注意,您的数据中可能还有各种模式,在这种情况下,您需要解决更大的问题。
一旦你选择了哪个模式你的" 字符串可能是日期"跟随;在s tr_to_date()
函数中应用该模式,然后通过查询将您的组生效。