vendredi 17 juin 2016

MySQL, subquery return null Date and Datetime

i have strange issue i have subquery that should return me information about holiday of user in given day

    SELECT `User`.`id`, `User`.`f_name`, `User`.`l_name`, `User`.`discharge`, `HourCard`.*, SUBSTRING(HourCard.date, 1, 10),
     (SELECT HOUR.date <---- subquery
      FROM hours AS HOUR
      WHERE DATE(HOUR.date) = DATE(HourCard.date) AND Hour.subordinate_id = User.id AND Hour.day_off_id IS NOT NULL) AS info

    FROM `kadry`.`hour_cards` AS `HourCard`
    LEFT JOIN `kadry`.`users` AS `User` ON (`HourCard`.`subordinate_id` = `User`.`id`)
    WHERE `User`.`assigned` = 'HHDO1461932902' AND `User`.`active` = 1 AND DATE(`HourCard`.`date`) BETWEEN '2016-06-01' AND '2016-06-30'
    ORDER BY `User`.`l_name` ASC, `HourCard`.`date` ASC

query returns :

    | id | f_name | l_name | discharge | id | subordinate_id | date | date_type | readed | SUBSTRING(HourCard.date, 1, 10) | info | 
    | 00623 | john | doe | null | 446610 | 00623 | 2016-06-01 17:06:12 | 1 | 0 | 2016-06-01 | null | 
    | 00623 | john | doe | null | 447779 | 00623 | 2016-06-02 08:00:49 | 0 | 0 | 2016-06-02 | null | 
    | 00623 | john | doe | null | 447778 | 00623 | 2016-06-02 17:13:53 | 1 | 0 | 2016-06-02 | null | 
    | 00623 | john | doe | null | 454696 | 00623 | 2016-06-03 08:03:40 | 0 | 0 | 2016-06-03 | null | 
    | 00623 | john | doe | null | 454697 | 00623 | 2016-06-03 17:03:36 | 1 | 0 | 2016-06-03 | null | 
    | 00623 | john | doe | null | 454699 | 00623 | 2016-06-04 08:05:07 | 0 | 0 | 2016-06-04 | null | 

but when i change subquery to this

(
    SELECT HOUR.date
    FROM hours AS HOUR
    WHERE  Hour.date = '2016-06-01' AND Hour.subordinate_id = User.id AND Hour.day_off_id IS NOT NULL) AS info

this query return good result like this:

    | id | f_name | l_name | discharge | id | subordinate_id | date | date_type | readed | SUBSTRING(HourCard.date, 1, 10) | info | 
    | 02979 | johny | notDoe | null | 455888 | 02979 | 2016-06-06 06:49:32 | 0 | 0 | 2016-06-06 | 2016-06-01 | 
    | 02979 | johny | notDoe | null | 456766 | 02979 | 2016-06-06 19:00:32 | 1 | 0 | 2016-06-06 | 2016-06-01 | 
    | 02979 | johny | notDoe | null | 457898 | 02979 | 2016-06-07 18:48:30 | 0 | 0 | 2016-06-07 | 2016-06-01 | 
    | 02979 | johny | notDoe | null | 458947 | 02979 | 2016-06-08 06:59:45 | 1 | 0 | 2016-06-08 | 2016-06-01 | 

i tried using functions :

DATE_FORMAT(HourCard.date, "%Y-%m-%d") = DATE_FORMAT(HOUR.date,"%Y-%m-%d")
DATE(HourCard.date) = DATE(HOUR.date)
SUBSTRING(HourCard.date, 1, 10) = SUBSTRING(Hour.date, 1, 10)

but only inserting string as shown above produce expected results and coding in both tables are the same. Hour.date is date type and HourCard.date is datetime.

Aucun commentaire:

Enregistrer un commentaire