有一個請假系統的資料表test,table為
請假人 起始時間 結束時間 請假天數
小張 2012/12/1 2012/12/5 5
有一筆資料(如上)為這個使用者小張的請假資料,假設今天系統日期是12/3號,我該如何查詢出請假人小張今天也還在請假中呢?謝謝!
select 人名 from test where (sysdate - 起始日期) < 請假天數
3-1=2 < 5 在五天內=請假
根據不同SQL與法有所不同,可以朝這個方向去寫!!
試
select a.id,a.name,a.start_date,a.end_date
,isnull((select '請假中' from test as b where a.id = b.id and convert(datetime,convert(varchar,getdate(),111)) between b.start_date and b.end_date),'工作中') as Ans
from test as a
或
列出請假中
select *
from test
where convert(datetime,convert(varchar,getdate(),111)) between start_date and end_date
可能你需要點中文...
select *
from test
where convert(datetime,convert(varchar,getdate(),111)) between 起始時間 and 結束時間
感謝大大,我腦袋轉不過來,這樣一看就比較了解了^^
那我再解釋一下好了。
getdate() 是MSSQL內建的系統日期,可以取得目前時間。
convert函數,可以用來轉換欄位型態,常用來數字轉文字,以便數字與文字欄位串接。
convert(varchar,getdate(),111)) 這樣可以取得當前日期,如2012-12-11
convert(varchar,getdate(),104)) 這樣可以取得當前時間,如AM 10:45:12 000
應該不必這麼麻煩才對..
Declare @Q_date = Convert(Date,'2012/12/03')
Select * from Test
Where Test.Start_date <= @Q_date
And Test.end_date >= @Q_date
如果求得的資料中有【小張】的資料,即代表該員尚在休假中...