<转>SQL函数——COALESCE

转载地址:http://blog.csdn.net/dba_huangzj/article/details/8300784#

目录

  1. 首先看看联机丛书的简要定义
  2. 语法
  3. 下面来看几个比较有用的例子
    1. 首先从MSDN上看看这个函数的使用方法coalesce函数下面简称函数返回一个参数中非空的值如
    2. 然后来看看把函数应用到Pivot中下面语句在AdventureWorks 数据库上运行
    3. 如果想扭转结果可以使用下面的语句
    4. 使用函数来执行多条SQL命令
    5. 还有一个很重要的功能当你尝试还原一个库并发现不能独占访问时这个功能非常有效我们来打开多个窗口来模拟一下多个连接然后执行下面的脚本

很多人知道ISNULL函数,但是很少人知道Coalesce函数,人们会无意中使用到Coalesce函数,并且发现它比ISNULL更加强大,其实到目前为止,这个函数的确非常有用,本文主要讲解其中的一些基本使用:

首先看看联机丛书的简要定义:

返回其参数中第一个非空表达式

语法:

COALESCE ( expression [ ,...n ] ) 

如果所有参数均为 NULL,则 COALESCE 返回 NULL。至少应有一个 Null 值为 NULL 类型。尽管 ISNULL 等同于 COALESCE,但它们的行为是不同的。包含具有非空参数的 ISNULL 的表达式将视为 NOT NULL,而包含具有非空参数的 COALESCE 的表达式将视为 NULL。在 SQL Server 中,若要对包含具有非空参数的 COALESCE 的表达式创建索引,可以使用 PERSISTED 列属性将计算列持久化,如以下语句所示:

[sql] view plaincopyprint?

  1. CREATE TABLE #CheckSumTest
  2. (
  3. ID int identity ,
  4. Num int DEFAULT ( RAND() * 100 ) ,
  5. RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
  6. );
CREATE TABLE #CheckSumTest
     (
         ID int identity ,
         Num int DEFAULT ( RAND() * 100 ) ,
         RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY
     );

下面来看几个比较有用的例子:

首先,从MSDN上看看这个函数的使用方法,coalesce函数(下面简称函数),返回一个参数中非空的值。如:

[sql] view plaincopyprint?

  1. SELECT  COALESCE(NULL, NULL, GETDATE())
SELECT  COALESCE(NULL, NULL, GETDATE())

由于两个参数都为null,所以返回getdate()函数的值,也就是当前时间。即返回第一个非空的值。由于这个函数是返回第一个非空的值,所以参数里面必须最少有一个非空的值,如果使用下面的查询,将会报错:

[sql] view plaincopyprint?

  1. SELECT  COALESCE(NULL, NULL, NULL)
SELECT  COALESCE(NULL, NULL, NULL)

然后来看看把函数应用到Pivot中,下面语句在AdventureWorks 数据库上运行:

[sql] view plaincopyprint?

  1. SELECT  Name
  2. FROM    HumanResources.Department
  3. WHERE   ( GroupName= ‘Executive Generaland Administration‘ )
SELECT  Name
 FROM    HumanResources.Department
 WHERE   ( GroupName= ‘Executive Generaland Administration‘ )

会得到下面的结果:

如果想扭转结果,可以使用下面的语句:

[sql] view plaincopyprint?

  1. DECLARE @DepartmentName VARCHAR(1000)
  2. SELECT  @DepartmentName = COALESCE(@DepartmentName, ‘‘) + Name + ‘;‘
  3. FROM    HumanResources.Department
  4. WHERE   ( GroupName= ‘Executive Generaland Administration‘ )
  5. SELECT  @DepartmentName AS DepartmentNames
DECLARE @DepartmentName VARCHAR(1000)

 SELECT  @DepartmentName = COALESCE(@DepartmentName, ‘‘) + Name + ‘;‘
 FROM    HumanResources.Department
 WHERE   ( GroupName= ‘Executive Generaland Administration‘ )

 SELECT  @DepartmentName AS DepartmentNames
  

使用函数来执行多条SQL命令:

当你知道这个函数可以进行扭转之后,你也应该知道它可以运行多条SQL命令。并且使用分号来区分独立的操作。下面语句是在Person架构下,有名字为Name的列的值:

[sql] view plaincopyprint?

  1. DECLARE @SQL VARCHAR(MAX)
  2. CREATE TABLE #TMP
  3. (Clmn VARCHAR(500),
  4. Val VARCHAR(50))
  5. SELECT @SQL=COALESCE(@SQL,‘‘)+CAST(‘INSERT INTO #TMP Select ‘‘‘ + TABLE_SCHEMA + ‘.‘ + TABLE_NAME + ‘.‘
  6. + COLUMN_NAME + ‘‘‘ AS Clmn, Name FROM ‘ + TABLE_SCHEMA + ‘.[‘ + TABLE_NAME +
  7. ‘];‘ AS VARCHAR(MAX))
  8. FROM INFORMATION_SCHEMA.COLUMNS
  9. JOIN sysobjects B ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = B.NAME
  10. WHERE COLUMN_NAME = ‘Name‘
  11. AND xtype = ‘U‘
  12. AND TABLE_SCHEMA = ‘Person‘
  13. PRINT @SQL
  14. EXEC(@SQL)
  15. SELECT * FROM #TMP
  16. DROP TABLE #TMP
DECLARE @SQL VARCHAR(MAX) 

 CREATE TABLE #TMP
    (Clmn VARCHAR(500),
     Val VARCHAR(50)) 

 SELECT @SQL=COALESCE(@SQL,‘‘)+CAST(‘INSERT INTO #TMP Select ‘‘‘ + TABLE_SCHEMA + ‘.‘ + TABLE_NAME + ‘.‘
 + COLUMN_NAME + ‘‘‘ AS Clmn, Name FROM ‘ + TABLE_SCHEMA + ‘.[‘ + TABLE_NAME +
 ‘];‘ AS VARCHAR(MAX))
 FROM INFORMATION_SCHEMA.COLUMNS
 JOIN sysobjects B ON INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = B.NAME
 WHERE COLUMN_NAME = ‘Name‘
    AND xtype = ‘U‘
    AND TABLE_SCHEMA = ‘Person‘ 

 PRINT @SQL
 EXEC(@SQL) 

 SELECT * FROM #TMP
 DROP TABLE #TMP

还有一个很重要的功能:。当你尝试还原一个库,并发现不能独占访问时,这个功能非常有效。我们来打开多个窗口,来模拟一下多个连接。然后执行下面的脚本:

[sql] view plaincopyprint?

  1. DECLARE @SQL VARCHAR(8000)
  2. SELECT  @SQL = COALESCE(@SQL, ‘‘) + ‘Kill ‘ + CAST(spid AS VARCHAR(10)) + ‘; ‘
  3. FROM    sys.sysprocesses
  4. WHERE   DBID = DB_ID(‘AdventureWorks‘)
  5. PRINT @SQL --EXEC(@SQL) Replace the print statement with exec to execute
DECLARE @SQL VARCHAR(8000)

 SELECT  @SQL = COALESCE(@SQL, ‘‘) + ‘Kill ‘ + CAST(spid AS VARCHAR(10)) + ‘; ‘
 FROM    sys.sysprocesses
 WHERE   DBID = DB_ID(‘AdventureWorks‘)

 PRINT @SQL --EXEC(@SQL) Replace the print statement with exec to execute

结果如下:

然后你可以把结果复制出来,然后一次性杀掉所有session。

<转>SQL函数——COALESCE

时间: 2024-10-13 22:32:34

<转>SQL函数——COALESCE的相关文章

[sql]sql函数coalesce返回第一个非空的值

下面来看几个比较有用的例子: 首先,从MSDN上看看这个函数的使用方法,coalesce函数(下面简称函数),返回一个参数中非空的值.如: SELECT  COALESCE(NULL, NULL, GETDATE()) 由于两个参数都为null,所以返回getdate()函数的值,也就是当前时间.即返回第一个非空的值.由于这个函数是返回第一个非空的值,所以参数里面必须最少有一个非空的值,如果使用下面的查询,将会报错:   SELECT  COALESCE(NULL, NULL, NULL)

SQL函数说明大全

一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描述. 函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如 COUNT.SUM.MIN 和 MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 将值从一种数据类型转换为另一种. 加密函数 支持加密.解密.数字签名和数字签名验证. 游标函数 返回有关游标状态的信息.

Oracle 11g 的PL/SQL函数结果缓存

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数. C:\Documents and Settings\guogang>sqlplus gg_test/[email protected]_gg SQL*Plus: Release 10.2.0.1.0

Oracle之SQL函数

1.SQL函数(1)字符函数:主要是操纵字符串(2)数字函数:主要是操纵数字类型的数值(3)转换函数:这些函数将数据从一种数据类型转换为另一种数据类型(4)日期函数:处理日期和时间(5)正则表达式函数:这些函数使用正则表达式搜索数据2.字符函数 (1)CONCAT(m,n) 将m和n连接起来,并返回连接后的字符串 (2)INITCAP(n) 将n中的第一个字母转换成大写 (3)INSTR(x,y,m,n) 在x中查找字符串y出现的位置.其中m,n是可选项,m代表从字符串x的第m个位置开始查找.n

SQL函数

1.内建SQL函数的[语法]: select  function(列)  from  表 [自带函数]: 1.avg函数:返回数值的平均值.null值不包括. select  avg(列名)  from  表名 2.count函数:返回匹配指定条件得行数  count(列名):返回指定列的值的数目(null不计入) select  count(列名) from  表名 count(*):返回表中的记录数 count(distinct  列名):返回指定列的不同值的数目 3.first函数:返回指

计算地球上两个坐标点(经度,纬度)之间距离sql函数

go --计算地球上两个坐标点(经度,纬度)之间距离sql函数 --作者:lordbaby --整理:www.aspbc.com CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @

Oracle数据类型,DDL、DML、DCL、TCL语言,SQL操作符,SQL函数

SQL查询与SQL函数 本章目标 了解Oracle数据类型  了解数据定义语言和数据操纵语言  了解事务控制语言和数据控制语言  掌握SQL操作符和SQL函数  SQL(structured query language)--结构化查询语言   通过SQL可以实现与Oracle服务器的通信   SQL是数据库语言,Oracle使用该语言存储和检索信息       表是主要的数据库对象,用于存储数据 用户  --------------------发送SQL语句查询----------------

Oracle 中的sql函数以及分页

SELECT LPAD('Page 1',15,'*.') "LPAD example" FROM DUAL; 1.分页查询 (1)方法一:使用  between  and 来实现分页 select * from ( select emp.*,rownum rn from emp ) where rn between 4 and 6 (2)方法二:使用 rownum 来实现分页 select * from ( select emp.*,rownum rn from emp where

SQL函数——LENGTH()和LENGTHB()

LENGTH()函数是比较简单同时也是非常有用的一个函数,在此小记一下,加深印象以备后用! 1:先上实验的例子--我新建了一张Student表,插入了若干条测试数据,如下图所示: 2:实验LENGTH()函数 3:实验LENGTHB()函数 解释一:此处的LENGTH()函数用于获取对应字段的字符长度 解释二:此处的LENGTHB()函数用于获取对应字段的字节长度 解释三:ORACLE安装好后默认的NLS_DATE_FORMAT参数值为DD-MON-RR OK,上面的两个函数和对应的实验结果已做