Based on your criteria (I never really had thought about Thanksgiving before, as far as when it hits), but here is a small Tcl proc that I think will do it. You may need to add error checking. Takes the year (i.e. 2001), and returns the day date (i.e. 22).
------------------------------------------- proc getTG {year} { set di \ [clock format [clock scan $year-11-30] -format "%w"] return [expr {30 - ((($di+1)%7)+2)}] } --------------------------------------------- I think this will do it (It might not work for esoteric cases...I didn't check all). Sorry, I don't know SQL well enough to give an answer in SQL...maybe someone else will though...or maybe you can extrapolate this proc into SQL. I think you may be able to modify this for Memorial and Labor day as well. --brett Josh Berkus wrote: > > Folks, > > I'm spec'ing a calendar app for PostgreSQL, and was wondering if anyone > had already solved the following problem: > > How can I calculate the dates of American holidays? > > Obviously, Christmas & New Year's are easy. As is July 4. > > However, Thanksgiving is the last Thursday in November, unless the month > ends on a Thursday or Friday, in which case it is the next-to-last. > Memorial Day and Labor Day are simpler, but also use the "First or Last > Monday in x month" idea. > > I was wondering if anyone had already figured out these calculations, in > any language (SQL would be terrific). > > Thanks! > > -Josh > > ______AGLIO DATABASE SOLUTIONS___________________________ > Josh Berkus > Complete information technology [EMAIL PROTECTED] > and data management solutions (415) 565-7293 > for law firms, small businesses fax 621-2533 > and non-profit organizations. San Francisco > > ------------------------------------------------------------------------ > Name: > Type: Plain Text (text/plain) > Encoding: base64 > > Name: > Type: Plain Text (text/plain) > Encoding: base64 > > Name: > Type: Plain Text (text/plain) > Encoding: base64 > > ------------------------------------------------------------------------ > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED]) _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html