开发者

mysql returns null when asking for difference between some value and null

开发者 https://www.devze.com 2023-03-06 21:24 出处:网络
in my table i have 3 column id, somevalue (float), current timestamp code below searches for the latest value in today\'s date and subtracts that with the value on monday of the same week. but i don

in my table i have 3 column id, somevalue (float), current timestamp

code below searches for the latest value in today's date and subtracts that with the value on monday of the same week. but i dont have any value stored for monday in this week so its NULL at the moment. but result of below code should be some value not null ???? dont understand how is it possible. pls explain.

select(SELECT power FROM newdb.newmeter
where date(dt)=curdate() order by dt desc limit 1)-
(select Power from newdb.newmeter
where date(dt)=(select date(subdate(now(), interval weekday(now()) day))));

as i was reading the similar questions-answers it looks like anything you do with null in mysql is null is it true?? if yes how do i resolve this

update: i tried this but didnt work select sum(amount) - coalesce(sum(due),0)

just wanted to add something more to this i'm calling querydb as following for the mysql in c++

bool Querydb(char *query, double Myarray[1024])
{
   //snip//

    if (mysql_query(conn, query)) {
    fprintf(stderr, "%s\n", mysql_error(conn));
    return 0;
    }

    else {
    res = mysql_use_result(conn);
    //output table name
    //printf("MySQL Tables in mysql database:\n");

    //checking for null value in database
    while((row = mysql_fetch_row(res))==NULL){
        printf("ERROR_____NULL VALUE IN DATABASE  ");
        return 0;
    }

    //if not null then ...
    while ((row = mysql_fetch_row(res)) != NULL){
        printf("rows fetched %s\n", row[0]);
        sprintf(buffer,"%s",row[0]);
       value1 = atof(buffer);
        Myarray[i]=value1;
        //printf("Myarray in sql for daybutton = %f\n",Myarray[i]);
        i++;
        }
    i=0;
    //for(i=0;i<5;i++){
    //开发者_运维问答    printf("mya arr in sqlfunction = %f\n",Myarray[i]);}
    return 1;
    }
    printf("if here then....where??\n");

   //close connection
   // mysql_free_result(res);
   //return 0;
}

the above function works ok with different query when database has null but doesnt work with this query

  select(SELECT power FROM newdb.newmeter
    where date(dt)=curdate() order by dt desc limit 1)-
    (select Power from newdb.newmeter
    where date(dt)=(select date(subdate(now(), interval weekday(now()) day))));

it returns 1 even thought the answer is NULL...


Consult the manual on working with NULL values. They are treated specially http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html


What value would you want it to be? This isn't particularly specific to MySQL - operations involving null operands (including comparisons) have null results in most SQL dialects.

You may want to use COALESCE() to provide a "default" value which is used when your real target value is null.


work Around would be

select(SELECT power FROM newdb.newmeter
where date(dt)=curdate() order by dt desc limit 1)-
(select COALESCE(Power,0) from newdb.newmeter
where date(dt)=(select date(subdate(now(), interval weekday(now()) day))));
0

精彩评论

暂无评论...
验证码 换一张
取 消