今天参加了学校的索迪杯预赛考试,结果看到试卷上的日文就懵了,考这玩意要考日文?就跟美国 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
* 注,经过‘汉子’网友的提醒,修改了部分语句