根據日期範圍來查詢是很常見的操作。表單中輸入 2012-05-01 到 2012-10-01, 很容易漏掉 2012-10-01 這一天的記錄, 而且總要判斷 is null 或者空串等也比較麻煩, 故寫了這段函式。
if exists(
select *
from dbo.sysobjects
where id = object_id(n'[dbo].fn_ltdate')
and (type = 'fn' or type = 'tf' or type = 'if')
)begin
print '已存在,刪除再新建'
drop function fn_ltdate
endelse
begin
print '不存在,新建'
endgo
--create by: yenange
--description: 前日期是否<=後面的日期(在同一天也算是小於等於)
--parameters : @startdate 前日期,@enddate 後日期.
-- 兩引數傳入時的型別可為 varchar 或者 datetime 型
-- 若有一引數為null或者'', 則返回1 (也算是小於等於)
--return : 是 1 否 0
create function dbo.fn_ltdate
( @startdate varchar(32),
@enddate varchar(32)
)returns bit
asbegin
declare @result bit
set @result = 0
if (
ltrim(rtrim(isnull(@startdate, ''))) = ''
or ltrim(rtrim(isnull(@enddate, ''))) = ''
or datediff(day, @startdate, '1900-01-01 00:00:00.000') = 0
or datediff(day, @enddate, '1900-01-01 00:00:00.000') = 0
or datediff(day, @startdate, @enddate) >= 0
)begin
set @result = 1
endreturn @result
endgo
declare @temptalbe table (id int, createtime datetime)
insert into @temptalbe
select 1,'2012-1-2' union
select 2,'2012-3-2 00:00:00' union
select 3,'2012-4-2' union
select 4,'2012-5-2 23:59:59' union
select 5,'2012-6-2 23:59:59'
--引數為 datetime 型
declare @startdate1 datetime
declare @enddate1 datetime
set @startdate1 = '2012-3-2'
set @enddate1 = ''
select *
from @temptalbe t
where dbo.fn_ltdate(@startdate1, createtime) = 1
and dbo.fn_ltdate(createtime, @enddate1) = 1
--引數為 varchar 型
declare @startdate2 varchar(10)
declare @enddate2 varchar(10)
set @startdate1 = '2012-3-2'
set @enddate1 = '2012-5-2'
select *
from @temptalbe t
where dbo.fn_ltdate(@startdate1, createtime) = 1
and dbo.fn_ltdate(createtime, @enddate1) = 1
查詢日期範圍比較
假 設資料庫中有兩個字段 range start和range end,分別存放證書的有效時間範圍。使用者輸入乙個查詢條件範圍 check start和check end,想要找到在這個時間範圍內所有有效的證書。邏輯應該是 證書有效開始日期大於查詢條件結束日期的不可以查出來,或者證書失效日期小於查詢條...
mongodb日期範圍 MongoDb查詢日期範圍
mongodb查詢轉物件是出錯element id does not match any field or property of class mongodb查詢轉物件是出錯element id does not match any field or property of class 解決方法 1...
Oracle日期範圍查詢交叉查詢方法
在日常開發中,有時候會需要查詢某個日期範圍內,但是通過資料庫查詢時開始時間需要資料庫有的才能查詢到,若是在jsp介面輸入的時間大於或小於資料庫的日期是查詢不出資料的 那麼此時我們可以用交叉查詢的方式,下面是我對這個的理解,若是有問題,望各位大神提出來,不勝感激!在oracle中,有時需要用到查詢日期...