简体   繁体   中英

Mysql query WHERE clause not working. WHERE useDate<>CURDATE()

useDate is date type and is NULL . The query below doesn't work

UPDATE licenses 
     SET useDate = CURDATE() 
WHERE license = 'ABC123' AND useDate <> CURDATE();

Your problem is the where clause -- NULL values don't match <> or = . You can do:

UPDATE licenses 
     SET useDate = CURDATE() 
WHERE license = 'ABC123' AND
      (useDate <> CURDATE() or useDate IS NULL);

Or use MySQL's NULL-safe comparison:

UPDATE licenses 
     SET useDate = CURDATE() 
WHERE license = 'ABC123' AND
      NOT (useDate <=> CURDATE());

SQL 101: NULL is not equal to anything. Likewise, NULL is not not-equal to anything. Use IS NULL in such situations:

UPDATE licenses
SET useDate = CURDATE()
WHERE license = 'ABC123' AND (useDate IS NULL OR useDate <> CURDATE());

convert date and use Trim on license column in case of any blank space

UPDATE licenses 
         SET useDate = date(now())
    WHERE Trim(license) = 'ABC123' AND date(useDate)!= date(now());

could be you have a datetime for useDate

    UPDATE licenses 
         SET useDate = CURDATE() 
    WHERE license = 'ABC123' AND date(useDate) != CURDATE();

so you need to compare the date part

That request worked for me ;)

UPDATE licenses 
SET useDate = CURDATE() 
WHERE license = 'ABC123' AND (useDate IS NULL OR useDate <> CURDATE());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM