Jay++ Monty++ -Sheeri
On 2/3/09, Monty Taylor <[email protected]> wrote: > > Jay Pipes wrote: > > Hi all again, > > > > I would like to propose the removal of the WEEK() and WEEKOFYEAR() > > functions from Drizzle and the corresponding default_week_format session > > variable, sometimes called the "week mode". > > > Sounds fine to me. If someone really wants week() or weekofyear() they > can write them as UDFs. > > > > Details of these things in MySQL can be found here: > > > > > http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week > > > > > http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_weekofyear > > > > > http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_default_week_format > > > > > > Why am I proposing this? A number of reasons: > > > > 1) Simplify the date functions > > 2) Standardize to format specifiers available in the C std library for > > strftime() > > 3) Removal of custom code that duplicates the strftime() and mktime() > > functions in cstdlib (about 1000 lines of code). > > > > Will there be any loss of functionality? > > > > No. At least not any functionality that makes sense. :) > > > > The DATE_FORMAT() function has specifiers which enable getting the week > > number in three formats which correspond to the strftime() format > > specifiers: > > > > %U returns the week number 00-53 where week 1 is the first week > > containing a Sunday. Days in a week preceding the first Sunday are in > > week 0. > > > > %W returns the week number 00-53 where week 1 is the first week > > containing a Monday. Days in a week preceding the first Monday are in > > week 0. > > > > %V returns the week number of the year (Monday as the first day of the > > week) as a decimal number [01,53]. If the week containing 1 January has > > four or more days in the new year, then it is considered week 1. > > Otherwise, it is the last week of the previous year, and the next week > > is week 1. This format is the format specified by ISO8601:1988. > > > > Currently, the WEEK() function is, IMHO, overly complex and mostly > > redundant with DATE_FORMAT() given one of the specifiers above. It uses > > a week_mode second argument, which influences the return of the function > > per the following table: > > > > Mode First day of week Range Week 1 is the first week... > > ------ ------------------- ------- ------------------------------- > > 0 Sunday 0-53 with a Sunday in this year > > 1 Monday 0-53 with more than 3 days this year > > 2 Sunday 1-53 with a Sunday in this year > > 3 Monday 1-53 with more than 3 days this year > > 4 Sunday 0-53 with more than 3 days this year > > 5 Monday 0-53 with a Monday in this year > > 6 Sunday 1-53 with more than 3 days this year > > 7 Monday 1-53 with a Monday in this year > > > > If we removed the WEEK() function and week_mode variable entirely, the > > only supported behaviours would be modes 0, 3, and 5. All other modes > > correspond to behaviour that is contrary to any standard. > > > > ISO8601:1988 dictates that the first week is the one containing more > > than 3 days in a year, and that Monday is the start of the week and week > > numbers are numbered 1-53. Therefore modes 1, 4, and 6 produce > > behaviour that is actually dangerous: it pretends to be ISO8601, but > > isn't correct. > > > > Therefore, I propose the removal of WEEK() and week_mode. > > > > Here is how one might produce the identical result to WEEK() for modes > > 0, 3, and 5 using DATE_FORMAT() properly: > > > > # "mode 0" > > SELECT DATE_FORMAT("2008-01-01", "%U")+0; > > # "mode 3" > > SELECT DATE_FORMAT("2008-01-01", "%V")+0; > > # "mode 5" > > SELECT DATE_FORMAT("2008-01-01", "%W")+0; > > > > Please vote for whether my proposal has merit. > > > > Thanks, > > > > Jay > > > > _______________________________________________ > > Mailing list: https://launchpad.net/~drizzle-discuss > > Post to : [email protected] > > Unsubscribe : https://launchpad.net/~drizzle-discuss > > More help : https://help.launchpad.net/ListHelp > > > > > _______________________________________________ > Mailing list: https://launchpad.net/~drizzle-discuss > Post to : [email protected] > Unsubscribe : https://launchpad.net/~drizzle-discuss > More help : https://help.launchpad.net/ListHelp > -- - Sheeri K. Cabral http://tinyurl.com/mysqlbook will take you to the Amazon.com page for my upcoming book, "MySQL Administrator's Bible".
_______________________________________________ Mailing list: https://launchpad.net/~drizzle-discuss Post to : [email protected] Unsubscribe : https://launchpad.net/~drizzle-discuss More help : https://help.launchpad.net/ListHelp

