Datetime return distinct days

i’m trying to create a query that returns the number of times a day occurs in my datetime field.

If it was just names or somethng i’d just do a distinct query but because the dates are stored as eg 2010-11-23 12:01:22 i can’t as it would just return everything.

So somehow i need to chop the date down to day and count how many times it occurs.

i was thinking that if i put it into a while look and just chop the string and then count the amount of times each day occurs i could then output the values for each unique day.

Iam not sure where to start on the while loop though i can do the chopping but i don’t know how to count each and then store that number against a a when it changes and then output it as an array.
any help or pointers would be appreciated

since the CHOP function is too generic (not to mention fictional), may i suggest you use the mysql DATE function on your datetime column, assign it an alias, and then use the alias in the GROUP BY clause


The MySQL SUBSTR() function can be used to “chop” up the value as a string. But you’ll probably kill database performance because the entire table will have to be scanned (i.e. no index will be used).

A better approach, since you probably want the ‘time’ part of the field for referencing elsewhere, is to create a new field in the table that is just a ‘date’ field. Then, use a “UPDATE tablename SET newfield = oldfield” statement to clone the datetime field value to the date-only field. Then, set an index on the date-only field. After that you should be able to use GROUP BY and COUNT() as normal on the new field.

thanks guys, yeah the chop function was a little vague :slight_smile: its similar to the judo_chop function.

You were correct in that i was using SUBSTR() function as performance is not a prob as its only for a stats page a handful of people will ever see.

Think i may just go for splitting up the date into year,month,day,time as it just seems to be easier.