1. 程式人生 > >mysql和sql時間 欄位比較大小的問題

mysql和sql時間 欄位比較大小的問題

不能用兩個字串比較的小的方法來做。例如:‘2010-10-20’ > ‘2010-12-15’

正解:都是  ,   後面的時間- 前面的時間

mysql

select count(*) from table where  timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00') > 0

server sql

select count(*) from table where DATEDIFF ([second], '2004-09-18 00:00:18', '2004-09-18 00:00:19')  > 0

1. 因此必須用

sql 的時間函式和字串轉化進行比較。

對於 mysql

(1) 如果資料庫表中的欄位是日期 格式的

select name,cdate from user where DATEDIFF('2010-1-10' , sysdate()) > 0

也可以用(這裡會自動的將字串轉化成日期格式然後想減,返回天數,前減後 ,小於 0 說明前面的日期小):

select name,cdate from user where DATEDIFF('2010-1-10' ,'2010-1-11') ;

可以不用日期和字串函式的轉化就可以了。

msql 的轉換函式: CAST('2010-10-10' AS DATE)

BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
示例:

SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);

mysql 返回兩個時間的秒的格式為 :

select DATEDIFF('2010-1-10' ,'2010-1-11');

select unix_timestamp('2008-1-1 11:20:50') - unix_timestamp('2008-1-1 12:10:20');

select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00');

select timestampdiff(second,'2008-08-01','2008-08-08');

(2) 如果資料庫表中的欄位是字元 格式的

如果上面的可以自動的轉換的話我們就沒有必要談 是字元格式的問題了。

對於 SQL

server sql 相對來說就比較寬泛一些了可以得到相差的時間精確到秒了。 ( 無所謂字元 還是時間格式了 )

SELECT DATEDIFF([year], GETDATE(), '2004-09-18') 返回值: -6 ,說明是後減前 mysql 相反的。

select datediff(day,getdate(),'2004-09-18')

SELECT DATEDIFF([hour], '2004-09-01', '2004-09-18')

SELECT DATEDIFF([second], '2004-09-18 00:00:18', '2004-09-18 00:00:19')