MySql 如果不是NULL 用法

SELECT * FROM data_set WHERE d_COD <> NULL ORDER BY d_id DESC

這樣不行  因為NULL值什麼都不是  沒辦法比對

SELECT * FROM data_set WHERE d_COD = NULL ORDER BY d_id DESC

這樣也不行 因為NULL值什麼都不是  沒辦法比對

要這樣 IS NOT

SELECT * FROM data_set WHERE d_COD IS NOT NULL ORDER BY d_id DESC

或 IS

SELECT * FROM data_set WHERE d_COD IS NULL ORDER BY d_id DESC

 

感覺要用語意的比較,無法用數值的比對,
相當哲學!!!

 

 

高興

php mysql時區不一樣

  1. 先show出測試主機時間
  2. 再來加上以下兩種擇其一之方式(台北時間)

ini_set(‘date.timezone’,’Asia/Taipei’);
date_default_timezone_set(‘Asia/Taipei’);

 

範例code

<?php
echo ‘主機時間: ‘.date(‘Y-m-d H:i:s’).'<br>’;//主機時間

date_default_timezone_set(‘Asia/Taipei’); //這邊用這一種

echo ‘更改後時間: ‘.date(‘Y-m-d H:i:s’).'<br>’; //再秀一遍更改後
?>

再來是MYSQL 部分,由於主機時間你用PHP改只是秀出正確而已,並沒有實際更正為你要的時區

因此你若用MYSQL 裡的NOW() 或是 CURDATE() 都有可能是GMT 00:00,
而台灣時區是GMT +08:00,所以SELECT出來的時間會不如預期,

因此我們可以採用CONVERT_TZ(時間變數,’+00:00從什麼時區’,’+08:00要成為的時區’)

下方範例code

我要選出訂單表格(order)裡的屬於今天任何時間的訂單(order_datetime是訂單時間 到秒 )
所以今天的日期NOW() 然後因為時區不同要改為(CONVERT_TZ(NOW(),’+00:00′,’+08:00′)

然後DATEDIFF(時間日期 , 設定時間日期)相減的位移天數 ,我們要今天所以相減為0

因此MYSQL code如下

SELECT * FROM order WHERE DATEDIFF(CONVERT_TZ(NOW(),’+00:00′,’+08:00′) , order_datetime ) = 0