>>>> 2013/10/22 12:20 -0400,  >>>>
I recently upgraded a local MySQL installation to 5.5.32 and am trying to 
figure out why the following query won't work as expected anymore. I'm just 
trying to compare a set of dates to NOW() but since the upgrade, these don't 
seem to work as expected.

SELECT 
DATE_ADD(STR_TO_DATE('2013-350-00:00:00','%Y-%j-%H:%i:%S'),INTERVAL 2 DAY), 
NOW(), 
DATE_ADD(STR_TO_DATE('2013-350-00:00:00','%Y-%j-%H:%i:%S'),INTERVAL 2 DAY)<NOW()

For instance, when I run it on my system, I get 1 for the third column even 
though comparing the two by eye it should be false.
<<<<<<<<
Well, show us all three columns....

And with 5.5.8 I get the same third column as you. Has it worked?

And I found that changed to

SELECT 
DATE_ADD(STR_TO_DATE('2013-350-00:00:00','%Y-%j-%H:%i:%S'),INTERVAL 2 DAY) AS 
A, 
NOW(), 
CAST(DATE_ADD(STR_TO_DATE('2013-350-00:00:00','%Y-%j-%H:%i:%S'),INTERVAL 2 DAY) 
AS DATETIME)<NOW() AS B

it works as hoped for--and it seems a bug to me, but probably an old one. It 
seems to me that the outcome of DATE_ADD is DATE, not DATETIME, and the 
comparison is numeric, with the six trailing 0s dropped. Quote about 
STR_TO_DATE:
"It takes a string str and a format string format. 
<file:///C:/Program%20Files/MySQL/MySQL%20Server%205.5/HELP/functions.html#function_str-to-date>STR_TO_DATE()
 returns a 
<file:///C:/Program%20Files/MySQL/MySQL%20Server%205.5/HELP/data-types.html#datetime>DATETIME
 value if the format string contains both date and time parts, or a 
<file:///C:/Program%20Files/MySQL/MySQL%20Server%205.5/HELP/data-types.html#datetime>DATE
 or 
<file:///C:/Program%20Files/MySQL/MySQL%20Server%205.5/HELP/data-types.html#time>TIME
 value if the string contains only date or time parts. "
How really does it decide which type to return? It is wrong if the decision is 
based whether all the hour, minute, and second are 0 or not.  


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to