以文本方式查看主题 - 搭建论坛 (http://bbs.diylsoft.com:8118/starforum/index.asp) -- 数据库交流 (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=6) ---- [分享]SQL Server系统函数 (转) (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=6&id=32431) |
-- 作者:萝卜特二 -- 发布时间:2013-4-6 16:49:07 -- [分享]SQL Server系统函数 (转) 一、字符转换函数 二、去空格函数 四、字符串比较函数 六、数据类型转换函数 八、统计函数 AVG ( ) -返回的平均价值 |
-- 作者:萝卜特二 -- 发布时间:2013-4-6 16:55:11 -- 九、数学函数 十、系统函数
追加:
一、row_number row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示: select row_number() over(order by field1) as row_number,* from t_table 上面的SQL语句的查询结果如图2所示。
实际上,row_number函数生成序号的基本原理是先使用over子句中的排序语句对记录进行排序,然后按着这个顺序生成序号。over子句中的order by子句与SQL语句中的order by子句没有任何关系,这两处的order by 可以完全不同,如下面的SQL语句所示: select row_number() over(order by field2 desc) as row_number,* from t_table order by field1 desc 上面的SQL语句的查询结果如图3所示。
with t_rowtable
select * from (select top 2 * from( select top 3 * from t_table order by field1) a order by field1 desc) b order by field1 这个查询结果除了没有序号列row_number,其他的与图4所示的查询结果完全一样。 二、rank
rank函数考虑到了over子句中排序字段值相同的情况,为了更容易说明问题,在t_table表中再加一条记录,如图6所示。 select rank() over(order by field1),* from t_table order by field1 上面的SQL语句的查询结果如图7所示。 三、dense_rank dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。如上面的例子中如果使用dense_rank函数,第4条记录的序号应该是2,而不是4。如下面的SQL语句所示: select dense_rank() over(order by field1),* from t_table order by field1 上面的SQL语句的查询结果如图8所示。
四、ntile select ntile(4) over(order by field1) as bucket,* from t_table
上面的SQL语句的查询结果如图9所示。 由于t_table表的记录总数是6,而上面的SQL语句中的ntile函数指定了桶数为4。 也许有的读者会问这么一个问题,SQL Server2005怎么来决定某一桶应该放多少记录呢?可能t_table表中的记录数有些少,那么我们假设t_table表中有59条记录,而桶数是5,那么每一桶应放多少记录呢? 实际上通过两个约定就可以产生一个算法来决定哪一个桶应放多少记录,这两个约定如下: 1. 编号小的桶放的记录不能小于编号大的桶。也就是说,第1捅中的记录数只能大于等于第2桶及以后的各桶中的记录。 2. 所有桶中的记录要么都相同,要么从某一个记录较少的桶开始后面所有捅的记录数都与该桶的记录数相同。也就是说,如果有个桶,前三桶的记录数都是10,而第4捅的记录数是6,那么第5桶和第6桶的记录数也必须是6。 根据上面的两个约定,可以得出如下的算法: // mod表示取余,div表示取整 |
-- 作者:萝卜特二 -- 发布时间:2013-4-6 16:55:57 -- 这个帖子发了5遍。 版主有空升级下论坛,限制比较多。经常发送不了。
|
-- 作者:heying -- 发布时间:2013-4-7 13:01:56 -- 应该是你截取时有错误,语法通不过;
如果超长,那必须要受限制的,否则攻击就受不了了;这是b/s模式必须要考虑的内容。 |