在我们写SQL的时候,经常会用到许多内置方法,简化了我们许多代码,也提高了效率,这篇主要总结一些常用的方法。

ISNULL VS COALESCE VS NULLIF

在SQL中,NULL值是比较特殊的,所以如何处理NULL值也是要注意的:

  • NULL + 10 = NULL
  • NULL OR TRUE = NULL
  • NULL OR FALSE = NULL

首先我们看一下这三个方法的定义吧:

Function  Description
ISNULL
ISNULL validates whether an expression is NULL and, if so, replaces the NULL value with an alternate value.
COALESCE
The COALESCE function returns the first non-NULL value from a provided list of expressions.
NULLIF
NULLIF returns a NULL value when the two provided expressions have the same value. Otherwise, the first expression is returned.

那如何在ISNULL和COALESCE中选择呢:

  • ISNULL容易拼写,让人感觉更简洁,直观。但在多链上面的写法很容易让人晕迷,比如:ISNULL(value1, ISNULL(value2, ISNULL(value3, '')))。这个时候推荐使用COALESCE了
  • COALESCE很灵活,而且是ANSI标准SQL的一部分。所以可移值性很好,如果在跨平台上的时候写SQL的时候,推荐COALESCE

Windowing Functions

Function  Description
ROW_NUMBER
ROW_NUMBER returns an incrementing integer for each row within a partition of a set.
ROW_NUMBER will return a unique number within each partition,starting with 1.
RANK
Similar to ROW_NUMBER, RANK increments its value for each row within a
partition of the set. The key difference is that if rows with tied values exist
within the partition, they will receive the same rank value, and the next
value will receive the rank value as if there had been no ties, producing a gap
between assigned numbers.
DENSE_RANK
The difference between DENSE_RANK and RANK is that DENSE_RANK doesn’t
have gaps in the rank values when there are tied values; the next value has
the next rank assignment.
NTILE
NTILE divides the result set into a specified number of groups, based on the
ordering and optional partition clause.

T-SQL Recipes之Common Function的更多相关文章

  1. 在Oracle/SQL Service中通过Function返回Table

    本函数用途:返回一个Table 在Oracle中实现,范例: --在Types中: create or replace type objTable as object ( s_usercode var ...

  2. mybatis的Mapper.xml文件SQL语句BadSqlGrammarException之FUNCTION错误系列

    想必各位在开发过程中一定使用过:统计的功能,用到了很多SQL的函数,于是就直接写在Mapper文件中了: 比如: member_num,MAX(ID) AS newestLoanID,MIN (ID) ...

  3. SQL Stored Procedure and Function

    Anything can be programmable with defined syntax and common lib. )) -- Add the parameters for the st ...

  4. SQL server 自定义函数FUNCTION的使用

    原文链接:https://blog.csdn.net/lanxingbudui/article/details/81736402 前言:        在SQL server中不仅可以可以使用系统自带 ...

  5. use sql trigger call java function

    Use UDF sys_exec to do this. You can use this link to use sys_exec function. It says, sys_exec sys_e ...

  6. sql:Mysql create view,function,procedure

    create database Liber; use Liber; #顯示數据庫 20150210 Geovin Du 涂聚文 SHOW DATABASES; drop table BookKindL ...

  7. sql and csharp: Split Function

    T-SQL: declare @int int,@prov int,@city int,@str nvarchar(500) set @str='天河麗特青春:中國廣東省廣州市天河區天河路623號天河 ...

  8. Yet Another 10 Common Mistakes Java Developers Make When Writing SQL (You Won’t BELIEVE the Last One)--reference

    (Sorry for that click-bait heading. Couldn’t resist ;-) ) We’re on a mission. To teach you SQL. But ...

  9. MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法

    MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DETER ...

随机推荐

  1. MySQL复制和集群

    一.复制配置 (A) 主从服务器相同版本的数据库 (B) 主服务器上复制使用的账户,具有相应的权限. (C) 修改主服务器的配置文件my.cnf,开启BINLOG,并设置server-id的值.重启后 ...

  2. libvirt 网络手册(一)

    如果选择网络类型 在一个专用的服务器上,虚拟机常常需要被从公网访问(也就是每个虚拟机都需要公网地址),这时就需要桥接网络,它使得每个虚拟机有自己的IPV4和IPV6地址.如果桥接不可用,可以创建一个R ...

  3. java关键包简易说明

    java.lang 语言核心类,系统自动导入. java.util   java工具类.集合框架.时间,日历等. java.net   网络编程接口和类. java.io 流的接口和类 java.te ...

  4. HTTP Status 400 - Required String parameter 'userName' is not present 错误

    HTTP Status 400 - Required String parameter 'userName' is not present 错误 先mark  有时间详细写 参考链接: https:/ ...

  5. html5 canvas-绘制贝塞尔曲线

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. spring拦截器 实现应用之性能监控

    package cn.ximi.erp.web.common.interceptors; import cn.ximi.core.common.utils.string.StringUtil; imp ...

  7. Linux+PHP+MySql网站迁移配置

    LINUX下MYSQL数据库默认数据库文件位置: 数据库文件默认在:cd /usr/share/mysql 配置文件默认在:/etc/my.cnf ———————————– 数据库目录:/var/li ...

  8. js之iframe子页面与父页面通信

    iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head& ...

  9. 裸奔单片机GUI

    #include "main.h"#ifndef __STD_GUI_CONTEX__#define __STD_GUI_CONTEX__ #define CPSTRSIZE 20 ...

  10. SVN本地代码未提交而被覆盖

    本地代码未提交而不小心被覆盖了,肿么办... 到回收站找到你的文件 xxx.mine,代码就可以找回来了.如果回收站没有了,那就没办法了. ---- 失而复得的感觉真好!