今天參加了學校的索迪杯預賽考試,結果看到試卷上的日文就懵了,考這玩意要考日文?就跟美國 GRE 考試要考《論語》一樣,反正很變態!!不過還有兩條比較經典的 SQL 題目值得跟大家分享,適合 SQL 的初學者學習,好像俺也就是算個初學者吧,好了,看題目。
第一題 用 SQL 判斷今年或者某一年是否是閏年 說明:SQL?閏年?兩者好像沒多大關係吧,跟考試考日文一樣,真佩服考官了,不過詳細用過 SQL server2000 的朋友肯定知道 NOW () 這個函數,我一開始也是這麼想的,可是 now () 包含太多的無用信息了,而且處理比較麻煩,於是又想到另一個函數 GETDATE (), 目前在 MSSQL2000 可用,其他的不太清楚,可以參閱用戶手冊,GETDATE () 的返回信息是今天的日期。
比如 :
SELECT GETDATE() AS DATE
結果是:
Dec 18 2008 22:20PM
包括 日期,時間,好,那我們就要這個年份
另外介紹一個日期截取函數 DATEPART ()
從函數名就可以知道了吧,就是用特定的索引截取響應的數據,我目前知道的 year mouth 都是可用,具體的參看用戶手冊
用法如下:
DATEPART(month, GETDATE())
那如何判斷一年是否是閏年呢?如果年份能整除 4 且不是 100 的倍數的是閏年,如果 是 100 的倍數,那麼就要除以 400 了
所以可以這麼判斷
DECLARE @year INT
IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'
所以綜上所述,SQL 語句如下:
DECLARE @year INT
SET @year = DATEPART(month, GETDATE())
IF (@YEAR % 4 =0 AND @YEAR %100 <> 0) OR (@YEAR % 400 = 0)
SELECT 'YES'
ELSE
SELECT 'NO'
第二題 現有學生的課程成績表 (SCG) 的包含學生 ID (SID, int)、課程 ID (CID ,int)、 成績 (grade ,int) 這幾列,求這些學生成績中每門學科成績的前兩名,按學號排序, 不考慮成績並列情況
分析,主要就是求出 TOP 2 就好了,另外要具體課程具體分析,因為包括不只一門 成績,因此需要多級嵌套查詢,效率可能較低,如果大家有更好的想法的話,歡迎 留言討論
SQL 語句如下:
SELECT t.SID AS 學生 ID , t.CID AS 課程 ID , t.grade as 分數
FROM SCG AS t
WHERE grade IN
(
SELECT TOP 2 grade
FROM SCG
WHERE
t.CID = SCG.CID
ORDER BY grade DESC
)
ORDER BY SID
* 注,經過‘漢子’網友的提醒,修改了部分語句