iT邦幫忙

0

請教SQL語法?

有一個請假系統的資料表test,table為
請假人 起始時間 結束時間 請假天數
小張 2012/12/1 2012/12/5 5
有一筆資料(如上)為這個使用者小張的請假資料,假設今天系統日期是12/3號,我該如何查詢出請假人小張今天也還在請假中呢?謝謝!

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2012-12-11 10:40:42 檢舉
樓主大,我看您問了不少相關問題...不知道您是否有買書或上MSDN等找資料理解一下?有一些問題實在太基本,我是覺得最好找時間把基礎也打好。

不過我想你應該是被趕鴨子上架XD
badboy01 iT邦新手 2 級 ‧ 2012-12-11 16:27:32 檢舉
大大,您好!
是阿~~上面臨時要這些東西,對完全沒接觸過的我來說真是痛苦= =",壓力好大。
summertw iT邦好手 1 級 ‧ 2012-12-12 09:07:07 檢舉
>>對完全沒接觸過的我來說真是痛苦= =",壓力好大。

資料庫管理或DBA被趕鴨子上架,是100%風險的行為...
若果真是如此,你應該盡快找新的工作..
因為這個風險可預知的是法律責任的後果...
badboy01 iT邦新手 2 級 ‧ 2012-12-12 09:55:34 檢舉
還不至於影響到公司系統,只是要用SQL語法查詢想要的結果。謝謝!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
14
ianianwu
iT邦研究生 5 級 ‧ 2012-12-10 16:29:21
最佳解答

select 人名 from test where (sysdate - 起始日期) < 請假天數
3-1=2 < 5 在五天內=請假
根據不同SQL與法有所不同,可以朝這個方向去寫!!

看更多先前的回應...收起先前的回應...
badboy01 iT邦新手 2 級 ‧ 2012-12-10 17:43:43 檢舉

您好!
可以列出您說的語法嗎?謝謝!

badboy01 iT邦新手 2 級 ‧ 2012-12-10 17:44:03 檢舉

系統是MSSQL

ianianwu iT邦研究生 5 級 ‧ 2012-12-10 18:32:40 檢舉

........汗語法都給你了,看不懂的話,可能你需要回去找你老師問一下Orz
或者GOOGLE大神

badboy01 iT邦新手 2 級 ‧ 2012-12-11 13:08:04 檢舉

謝謝大大指教!

14
dpanaben
iT邦研究生 5 級 ‧ 2012-12-10 16:27:34

大於等於起始時間
小於等於結束時間

badboy01 iT邦新手 2 級 ‧ 2012-12-10 17:41:14 檢舉

您好!
可以列出語法嗎?謝謝!

20
純真的人
iT邦大師 1 級 ‧ 2012-12-10 18:38:50

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 結束時間

badboy01 iT邦新手 2 級 ‧ 2012-12-11 10:56:56 檢舉

感謝大大,我腦袋轉不過來,這樣一看就比較了解了^^

那我再解釋一下好了。

getdate() 是MSSQL內建的系統日期,可以取得目前時間。

convert函數,可以用來轉換欄位型態,常用來數字轉文字,以便數字與文字欄位串接。

convert(varchar,getdate(),111)) 這樣可以取得當前日期,如2012-12-11

convert(varchar,getdate(),104)) 這樣可以取得當前時間,如AM 10:45:12 000

badboy01 iT邦新手 2 級 ‧ 2012-12-11 14:38:22 檢舉

jer5173提到:
where convert(datetime,convert(varchar,getdate(),111)) between 起始時間 and 結束時間

以上這段我用大大的"convert(varchar,getdate(),111))"結果也一樣,這樣可以嗎?
感謝大大,可以查詢出我要的結果了。

你可以試試~研究看看會怎樣^^

badboy01 iT邦新手 2 級 ‧ 2012-12-12 09:53:30 檢舉

恩~~好的~感謝喔!

14
summertw
iT邦好手 1 級 ‧ 2012-12-11 09:18:43

應該不必這麼麻煩才對..
Declare @Q_date = Convert(Date,'2012/12/03')
Select * from Test
Where Test.Start_date <= @Q_date
And Test.end_date >= @Q_date

如果求得的資料中有【小張】的資料,即代表該員尚在休假中...

badboy01 iT邦新手 2 級 ‧ 2012-12-11 10:58:07 檢舉

感謝大大,這個方法是寫成副程式嗎?

summertw iT邦好手 1 級 ‧ 2012-12-12 09:12:55 檢舉

因為不知您的系統架構為何,所以不能知道該段程式要置放在何處..
畢竟可知的條件太少,能幫的也就只有這些了...

祝你成功..

badboy01 iT邦新手 2 級 ‧ 2012-12-12 09:53:08 檢舉

感謝大大幫忙~~

我要發表回答

立即登入回答