sql語句中日期時間類型怎么比較
一.存儲日期的字段為日期類型
MySql(Date、DateTime、TimeStamp等):
方法一:直接比較
select * from test where create_time between '2015-03-03 17:39:05' and '2016-03-03 17:39:52';
方法二:用unix_timestamp函數,將字符型的時間,轉成unix時間戳
select * from test where unix_timestamp(create_time) >
unix_timestamp('2011-03-03 17:39:05') and unix_timestamp(create_time)
個人覺得這樣比較更踏實點兒。
Oracle(Date,TimeStamp等):
方法一:將字符串轉換為日期類型
select * from test where create_time between to_date('2015-03-03 17:39:05') and to_date('2016-03-03 17:39:52');
二.存儲日期類型的字段為數值類型
MySql(bigint):
方法一:將日期字符串轉換為時間戳
select * from test where create_time >unix_timestamp('2011-03-03
17:39:05') and create_time方法二:將時間戳轉換為日期類型
select * from test where from_unixtime(create_time/1000) between '2014-03-03 17:39:05' and '2015-03-03 17:39:52');
SQL語句 怎樣比較兩個日期的大小,簡單一點的
慣例,在等號左邊盡量不要有對字段的運算,所以一般用法有:1、判斷其是否在某個日期區間:Where CheckDate Between '2013-01-01' And '2013-01-31'這個方法也可用于加幾天是多少,或減幾天是多少: 把起迄日期參數化,原CheckDate要加的,那就變成@BeginDate加,減也同理~2、判斷其是否大于某天:Where CheckDate >'2013-01-01' 或大于等于:Where CheckDate >='2013-01-01'小于某天Where CheckDate <'2013-01-01' 或小于等于:Where CheckDate <='2013-01-01'3、判斷其是否等于某天:如果Check字段不帶時間,只是年月日,那直接等于就可以了;Where CheckDate ='2013-01-01'如果CheckDate字段是攜帶時間的就會有差別;這一點,在上述所有方法中都需要注意eg:CheckDate 實際存儲值可能是: 20130101 08:50:54:000 或 20130101 22:50:54:000這時直接用上面的等號是抓不到的,因此或改寫成:Where CheckDate >= '2013-01-01' And CheckDate < '2013-01-02'當然也可以把'2013-01-01',定義為參數@Date DateTimeWhere CheckDate >= @Date And CheckDate < @Date+1不建議在等號左邊使用函數或計算對表字段進行計算。
以上是兩個日期的判斷,另外有些日期處理函數可以了解一下:DATEDIFF ( datepart , startdate , enddate )返回指定的 startdate 和 enddate 之間所跨的指定 datepart 邊界的計數(帶符號的整數)。eg:Select DateDiff(DAY,'20130101','20130105') 1號到5號相差4天,輸出結果為4常用的datepart 有: datepart 縮寫 year yy, yyyy 年month mm, m 月 day dd, d 日week wk, ww 周hour hh 時minute mi, n 分second ss, s 秒 DATEADD(datepart, number, date)將表示日期或時間間隔的數值與日期中指定的日期部分相加后,返回一個新的 DT_DBTIMESTAMP 值。
number 參數的值必須為整數,而 date 參數的取值必須為有效日期。eg:Select DATEADD(DAY,1,'20130101') 1號加1天就是2號;輸出結果為 '2013-01-02'Number可以是負數就變成減幾天DATEADD(datepart, number, date)將表示日期或時間間隔的數值與日期中指定的日期部分相加后,返回一個新的 DT_DBTIMESTAMP 值。
number 參數的值必須為整數,而 date 參數的取值必須為有效日期。eg:Select DATEPART(DAY,'20130101')返回datepart描述的部分,輸出結果為 1。
SQL 時間比較
有這么一個古老的傳說:
相傳,在遠古時期,豬頭設計者們定義日期類型的時候,一共制定了兩套:Date 和 Datetime 類型,
Date是日期的,如:2010-3-15
Datetime日期及時間的,如:2010-3-15 12:01:56:469
假設你要比較的兩個時間都是Datetime類型數據,它們不相等的可能性也許是99.99%,因為不僅日子要一樣,而且小時、分鐘、秒、微秒都要相等,那才算是一致。
假設交易日期這個數據是今天上午產生的,開始日期是今天下午生成的,那么,肯定不相等了。
所以你要讓同一天(不管幾點鐘)的相關聯,那就用個函數吧,辦法太多了:
①:將Datetime轉換為Data再比較,where條件:
convert(date,a.交易記賬日期) >= convert(date,b.開始日期)
例如:convert(date, 2010-3-15 19:25:30) 就會返回date型的 2010-3-15 00:00:00,小時分鐘什么的全是0了,所以同一天的就相等了
②:將它們按你要求的格式轉換為字符串后再比較,where條件:
convert(varchar,a.交易記賬日期,102) >= convert(varchar,b.開始日期,102)
例如:convert(varchar, 2010-3-15 19:25:30, 102) 就會返回字符型的2010.3.15,小時分鐘什么的全甩掉了
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
請根據這個傳說對號入座,希望有所提醒,如果不是這個原因,咱們再研究~