sql2012新的系统函数&分析函数

一 、系统函数

1相当于C#中三目运算符的IIF函数

这个函数和VBA中的IIF函数相同,判断第一个参数的表达式是否为真,真则返回第二个参数,假则返回第三个参数。

有了这个函数很多时候我们可以不用再使用复杂的case when语法了。比如我们判断项目的大小以显示对应的字符串,那么老的写法是:

select p.CODE,case when p.SIZE>100 then ‘Big‘ else ‘Small‘ end as SIZE_STRING
from PROJECT p
where SIZE is not null

--现在,我们可以简单的写成:
select p.CODE,IIF(p.SIZE>100,‘Big‘,‘Small‘) as SIZE_STRING
from PROJECT p
where SIZE is not null

2不用判断类型和NULL的字符串连接CONCAT函数

SQL Server本来对字符串的连接很简单,直接使用“+”号,但是需要注意两个问题,一是必须类型都是字符串类型,如果是数字类型那么会报语法错误,所以必须把数字类型转换为字符串。二是如果其中的某个值为null,那么整个连接的结果就是一个null字符串,所以还需要判断null,所以本来只是一个连接字符串的查询就会写的很复杂:

select p.PROJECT_ID, p.CODE+‘,‘+p.NAME+‘,‘+ISNULL(p.NICK_NAME,‘‘)+‘,‘+ISNULL(CONVERT(varchar(50),p.SIZE),‘‘)
from PROJECT p

--现在使用CONCAT函数,直接忽略其中的类型,忽略对NULL的检查,直接连接成一个非空的字符串:
select p.PROJECT_ID,CONCAT( p.CODE,‘,‘,p.NAME,‘,‘,p.NICK_NAME,‘,‘,p.SIZE)
from PROJECT p

Concat如其名称所示,用于连接两个字符串.但比过去的增强是可以免去类型转换的烦恼而直接将多个值连接为一个String值进行返回

可以明显感觉到简洁了很多。

3.转换成字符串时设置格式的FORMAT函数。

以前要把数字或者日期转换成字符串,可以使用CONVERT函数并带人第三个整数类型的参数指定转换的格式,不过这种方法太麻烦,整数参数不容易理解和记忆,而且也不灵活。现在的FORMAT函数相当于C#中的String.Format函数,在第二个参数中可以想要输出的格式。

select p.PROJECT_ID,FORMAT(p.CREATED_TIME,‘yyyy-MM-dd‘),CONVERT(varchar(50),p.CREATED_TIME,112)
from PROJECT

4让枚举显示更方便的CHOOSE函数。

在程序中经常使用枚举值,在数据库中使用tinyint来保存枚举值,但是在查看时却不是很容易理解枚举值的含义,必须查看代码看1对应什么,2对应什么才知道。在显示的时候如果要显示成字符串,那么就需要使用case when进行判断。现在可以使用CHOOSE函数,让枚举转换成字符串变得很简单。比如要显示项目的状态,那么我们的查询就是:

select p.CODE,CHOOSE( p.STATUS,‘Plan‘,‘Exec‘,‘Complete‘,‘Abort‘,‘Fail‘)
from PROJECT p

CHOSSE函数比case when有几个缺点,1是不支持0和负数,所以如果枚举的值是0那么就没办法显示,2是枚举值必须连续而且比较小,不能使用100、200等值,那要是用CHOOSE那得写死人了。没有default值,使用case when的时候,如果不匹配还有个else值可以显示,而使用CHOOSE后如果没有匹配的,那么就是NULL值。所以个人觉得这个函数的使用面非常

5各种日期时间函数。

除了一个EOMONTH函数是返回给定日期的最后一天外,其他的新函数,都是把年月日作为参数传进去,返回指定数据类型的对象,相当于就是CONVERT函数的变形。总体使用不多,在此不多介绍

二、OVER子句的增强和新增一些分析函数。

之前OVER子句是用于RANK,ROW_NUMBER等排名函数,现在OVER子句得到了大大的增强, 可以将OVER子句应用到聚合函数中,也增加了一些分析函数。

比如我有一个项目和客户表,一个客户对于多个项目,现在需要知道客户的信息和每个客户的最新项目Code,这个要是以前还不好实现,现在我们有了分析函数,可以使用FIRST_VALUE或者LAST_VALUE再配合OVER子句,得到我们想要的结果:

select distinct c.*,FIRST_VALUE(p.CODE) over(PARTITION BY c.CLIENT_ID order by p.[CREATED_TIME] desc) as LAST_PROJECT_CODE
from PROJECT p
inner join CLIENT c
on p.CLIENT_ID=c.CLIENT_ID

 
时间: 2024-10-08 13:25:47

sql2012新的系统函数&分析函数的相关文章

如何在不使用系统函数的情况下实现PHP中数组系统函数的功能

PHP中为我们提供了各种各样的系统函数来实现我们需要的各种功能,那么,在不使用系统函数的情况下我们要怎样来实现这些功能呢?以下就是几种系统函数的实现方式. 首先,我们来定义一个数组: $arr= array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>"haha",10); 以下是对于这个数组可以使用的系统函数和不使用系统函数获得同样效果的方式: 1.返回数组的所有的值,返回数组.(arra

Oracle 常用系统函数

2  字符函数 1.    replace( 字符串1,字符串2,字符串3) replace( char, search_string, replace_string) 功能:在"字符串1"中搜索"字符串2",并将其替换为"字符串3". 例如下面的命令是将所有员工名字中出现的"A"替换为"中国". SQL>selectreplace(ename, 'A', '中国') from scott.emp;

【T-SQL系列】新的排序函数

原文:[T-SQL系列]新的排序函数 如:ROW_NUMBER.RANK.DENSE_RANK三个分析函数都是按照col1分组内从1开始排序 ROW_NUMBER() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页 DENSE_RANK() 是连续排序,两个第二名仍然跟着第三名RANK() 是跳跃拍学,两个第二名下来就是第四名 示例: DECLARE @t1 TABLE ( Sequence INT , Name VARCHAR(20) , Score INT ) IN

JavaScript-面向对象-系统函数-内部类-Math-Date-String-Array-Boolean-Number

内部类 - Math - Date - String - Array - Boolean - Number 系统函数 1. 内部类 1) 什么是内部类 JavaScript中本身就提供一些 可以直接使用的类, 这种由JS本身事先定义好的类就是内部类 2) 主要的内部类 ① Array ② Boolean ③ Date ④ Math ⑤ Number ⑥ String ⑦ RegExp (待续) ⑧ Global (全局) ⑨ Object (根对象) 3) 分类(以使用的方式分) ① 动态内部类

第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)

原文:第三章--使用系统函数.存储过程和DBCC SQLPERF命令来监控SQLServer(3) 本文为这个系列最后一篇.将是如何使用DBCC命令来监控SQLServer日志空间的使用情况. 前言: 每个数据库都必须有事务日志.事务日志记录每个DML操作,并应用于SQLServer的数据库中,如果恢复模式为FULL并经常有DML操作,日志将增长得非常快.几时恢复模式为simple,当数据库处于事务复制或者合并复制时,日志通常会增长.如果日志不是经常备份且日志文件的增长没有受到限制的话,将有可能

系统函数dlopen()被劫持导致symbol找不到的问题记录

问题现象 我们实现了一个名叫libilvrfplugin.so的lib,该lib链接了libiubsntconflib.so, 而libiubsntconflib.so 又链接了libipconflib.so, libipconflib.so里面实现了一个方法check_vrf_r()用于检查VRF的合法性. 简单点来说,A lib链接了B lib,而B lib又链接了C lib,C lib实现了方法check_vrf_r(). 某些场景下,系统会动态加载A lib, 但是A lib根本没用到方

Unity3d 4.0新动画系统Mecanim用法(二)

上一篇,我们初步了解了一下Mecanim的部分很基础的类容,我以一个疑问的形式结尾.这次我来揭晓此问题的答案,其实很简单,上次的警告如下: 4.0新动画系统Mecanim用法(二)"> 警告的大概意思是:用在Animator Controller中的Animation clips需要有在检视面板中被设置了Muscle(肌肉)的这个步骤. 我的英文很烂,但我可以知道这句话的含义,就是我们的用到的这个Animation Clip必须是已经产生了Avatar的模型中的Animation Clip

小程序新零售系统能给企业带来哪些效益

小程序新零售系统怎么帮助企业结合O2O 1.小程序新零售系统的核心模式,新零售=大数据 线上交易平台 线下的体验平台.支付.最有效的物流整合, 线上与线下渠道的打通,以大数据作为指引,以支付和物流作为完成闭环的一节,这五步,构成了未来新零售的骨骼. 2.是消费者的诉求驱动了生产链.刘兴波并不觉得销售传统如人们所说的被颠覆了,反而只是市场的一种进步,是消费习惯和销售形态之间的共同进步.人们逐渐迁移至移动端,更加数字化,产生了更强的主观意识,而"现代人"自主的生活方式探寻出了新零售的发展方

php 常用的系统函数

php 常用的系统函数 本文介绍了php 常用的系统函数,具有很好的参考价值,下面跟着 大宝儿 一起来看下吧 字符串函数        strlen():获取字符串长度,字节长度 substr():字符串截取,获取字符串(按照字节进行截取) strchr():与substr相似,从指定位置截取一直到最后 strrchr(获取文件后缀名):与strchr一样,只是从右边开始查找字符 strtolower():所有的字符都小写(针对英文字母) strtoupper():所有的字符都大写 strrev