目录
源数据表
姓名 | 身份证 |
杨永春 | ******199106307228 |
姚前成 | ******198904184965 |
向雪莲 | ******199205204964 |
余依良 | ******199312214059 |
熊丽娟 | ******199107282121 |
于彧 | ******199208032716 |
项军 | ******198909276106 |
向芳 | ******199208245327 |
徐俊伟 | ******199212302746 |
殷婷婷 | ******19880518433X |
杨红梅 | ******19920714031x |
徐玲 | ******199308064038 |
徐玉洁 | ******199211064361 |
谢凤英 | ******199112300068 |
袁瑜 | ******19921221451x |
徐溶梅 | ******199307315114 |
杨德华 | ******199009220022 |
颜诗荣 | ******198907291243 |
许建平 | ******199201198142 |
夏红 | ******199206122850 |
杨智凌 | ******199303105944 |
杨明红 | ******198912010026 |
向守菊 | ******199305120262 |
姚丹 | ******19930108240X |
为增进了解,某高校学生社团每年组织新生联谊活动,其中一项为向新生中生日最小的10位同学发放爱心礼物。根据图所示的身份证号码提取生日最小的10位同学名单。
解决方案
通过CLNG函数按出生年月日降序排列后,用TOP谓语返回要求的名单。
SELECT TOP 10 姓名,身份证
FROM [sheet1$]
ORDER BY CLNG(MID(身份证,7,8)) DESC
CLNG函数的使用
ORDER BY子句将其后的字段升序或降序排列。
TOP谓语可以返回指定范围内的一定数最的记录。
CLNG函数将表达式返回为长整型数值,其语法如下:
CLNG(expression)
其中参数expression为任意表达式,该表达式取值范围为-2 147 483 648~2 147 483 647。当参数expression返回结果包含小数时,该参数按照四舍六入五单双的规则进位为整数后参与
运算。如CLNG(-6.5)返回-6,CLNG(-5.5)返回-6,CLNG(5.5)返回6.CLNG(6.5)返回6。
当参数expression返回结果-32768~32767间时,该函数返回结果与CINT函数相同。
本例也可通过如下三个语句返回同样的结果。
SELECT TOP 10 姓名,身份证
FROM [sheet1$]
ORDER BY CDBL(MID(身份证,7,8)) DESC
SELECT TOP 10 姓名,身份证
FROM [sheet1$]
ORDER BY CSNG(MID(身份证,7,8)) DESC
SELECT TOP 10 姓名,身份证
FROM [sheet1$]
ORDER BY CVAR(MID(身份证,7,8)) DESC
CDBL函数、CSNG函数及CVAR函数用法比较
函数 | 语法 | 参数取值范圈 | 返回结果 |
CDBL |
CDBL(expression)
| 为负数时,范围为-1.79769313486231E+308~-4.94065645841247E-324; 结果为正数时,范围为4.94065645841247E-324~1.7976931348623ZE+308 | double型值 |
CSNG | CSNG(expression)
| 为负数时,范围为-3.402823E+38~1.401298E-45; 为正数时,范围为1.401298E-45—3.402823E+38 | single型值 |
CVAR | CVAR(expression) | 若为数值,则范围与double相同:若为字符串,则范围与string相同 | 字符串 |