`
尚将军
  • 浏览: 34729 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一个非常有用的函数——COALESCE

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


首先看看联机丛书的简要定义:返回其参数中第一个非空表达式

语法:COALESCE ( expression [ ,...n ] )

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

  
 CREATE TABLE #CheckSumTest   
         (  
             ID int identity ,  
             Num int DEFAULT ( RAND() * 100 ) ,  
             RowCheckSum AS COALESCE( CHECKSUM( id , num ) , 0 ) PERSISTED PRIMARY KEY  
         );  


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


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

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



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

   
SELECT  Name  
     FROM    HumanResources.Department  
     WHERE   ( GroupName= 'Executive Generaland Administration' )
 
会得到下面的结果:


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

    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的列的值:
   
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  



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



  
 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。




  • 大小: 7.3 KB
  • 大小: 23.6 KB
  • 大小: 26.7 KB
  • 大小: 229.5 KB
  • 大小: 19.8 KB
分享到:
评论

相关推荐

    oracle 内置sql函数

    Oracle还提供了许多其他特殊功能的函数,如`COALESCE`返回第一个非空值,`DECODE`用于条件判断和替换,`NVL`处理NULL值等。 这些内置函数极大地简化了SQL查询和PL/SQL编程,提高了开发效率,使得数据处理更加灵活。...

    mysql函数大全,mysql

    COALESCE它会返回列表中第一个非NULL的值,或者,如果不存在非NULL的值,它就会返回一个NULL INTERVALINTERVAL运算符提供另外一种对数字及其范围的控制。它接受一个数字列表(N0, N1, N2...),将N0与剩下的所有数字...

    oracle新手入门指导之三续——精简ORACLE常用函数大全.txt

    - **COALESCE**:返回第一个非空的参数。 - 示例:`COALESCE(expr1, expr2, expr3)` 如果 `expr1` 非空则返回 `expr1`,否则检查 `expr2` 等。 通过上述介绍可以看出,Oracle提供了丰富的函数来支持数据的处理和...

    Oracle内置SQL函数-分类整理大全.doc

    - **功能**: 返回一个新的字符串,其中每个单词的第一个字母大写而单词中的其他字母小写。单词是由空格或其他非字母数字字符分隔的。 - **使用位置**: 过程性语句和SQL语句。 **1.1.4 LTRIM** - **语法**: `LTRIM...

    实验6数据库实验——存储过程和触发器.doc

    它们可以接受输入参数,并且可以返回一个或多个输出参数。下面详细介绍实验中的几个存储过程。 1. **创建存储过程计算累加和并打印结果** ```sql CREATE PROCEDURE addresult AS DECLARE n int = 10, -- 最后...

    第四周-数据库系统功能相关学习-FNjoker-14961

    ASCII(s)函数返回字符串s的第一个字符的ASCII码,这在处理字符编码时非常有用。CHAR_LENGTH(s)和CHARACTER_LENGTH(s)都是用来计算字符串s的字符数,确保了对字符串长度的准确计算。CONCAT(s1, s2...)用于合并多个...

    sql由入库单与出库单统计库存

    下面我们将详细解析这段代码,并提供一个更清晰、准确的实现方法。 ### SQL查询实现 为了实现统计库存的功能,我们可以使用如下SQL语句: ```sql -- 统计库存数量 SELECT fm.类别, fm.品名, fm.单位, SUM...

    torch_sparse-0.6.9-cp37-cp37m-win_amd64whl.zip

    其中,`torch_sparse`是一个非常重要的扩展库,专门用于处理稀疏张量,这对于图神经网络(GNNs)等应用至关重要。本文将详细阐述`torch_sparse-0.6.9-cp37-cp37m-win_amd64.whl`这一特定版本的安装步骤、使用方法...

    torch_sparse-0.6.10-cp38-cp38-linux_x86_64whl.zip

    torch_sparse是PyTorch生态系统中的一个第三方库,它为稀疏张量提供了丰富的操作函数,包括但不限于矩阵乘法、加法、索引、切片以及各种转换。这个库特别适用于处理大型图数据,因为稀疏张量可以在保持计算效率的...

    torch_sparse-0.6.18+pt21cpu-cp311-cp311-win_amd64.whl.zip

    在PyTorch生态系统中,torch_sparse是一个重要的扩展库,它为处理稀疏张量提供了便利。本文将深入探讨torch_sparse-0.6.18+pt21cpu版本的特性和使用方法,以及如何与PyTorch 2.1.0+cpu版本进行协同工作。 torch_...

    weibo_summer.zip

    本文将深入探讨一个使用Hive进行微博数据分析的实际案例——"weibo_summer.zip"项目,该压缩包文件包含了进行此类分析所需的脚本和数据。Hive作为Hadoop生态中的一个数据仓库工具,因其SQL-like查询语言和对大规模...

    torch_sparse-0.6.12-cp37-cp37m-macosx_10_14_x86_64whl.zip

    torch_sparse是专门为PyTorch设计的一个库,用于处理稀疏张量,它极大地优化了在图神经网络(GNNs)中的计算效率。 torch_sparse-0.6.12-cp37-cp37m-macosx_10_14_x86_64.whl是一个专为Python 3.7和macOS 10.14设计...

    torch_sparse-0.6.4-cp36-cp36m-linux_x86_64whl.zip

    首先,`torch_sparse`是一个专门为PyTorch设计的库,它包含了一系列操作稀疏矩阵的功能,如矩阵乘法、切片、索引、求和等,这些在处理大规模图数据时非常有用。`torch_sparse-0.6.4`表示该版本是0.6.4版,`cp36`意味...

    torch_sparse-0.6.9-cp36-cp36m-linux_x86_64whl.zip

    5. `add()`: 合并两个稀疏张量或一个稀疏张量与一个密集张量。 6. `index_select()`, `slice()`: 根据索引选择或切片稀疏张量。 7. `to()` 和 `from_torch()`: 在PyTorch的稠密张量和`torch_sparse`的稀疏张量之间...

    torch_sparse-0.6.10-cp39-cp39-macosx_10_14_x86_64whl.zip

    今天我们要讨论的是一个专门针对PyTorch的扩展库——torch_sparse,这是一个用于处理稀疏张量的库,其版本为0.6.10,适用于Python 3.9,并且是专为macOS 10.14及x86_64架构设计的。在安装这个库之前,我们需要确保...

    torch_sparse-0.6.17+pt20cpu-cp311-cp311-linux_x86_64whl.zip

    1. **稀疏张量操作**:库提供了创建、修改和操作稀疏张量的功能,如`coalesce()`用于合并非零元素,`sparse_mask()`用于根据一个稀疏张量的结构对另一个张量进行掩码操作。 2. **矩阵乘法**:实现了稀疏-稠密和稀疏...

    torch_sparse-0.6.11-cp37-cp37m-linux_x86_64whl.zip

    今天,我们将深入探讨一个针对PyTorch的扩展库——torch_sparse-0.6.11,它为处理稀疏张量提供了便利。本文将围绕其功能、兼容性、安装和使用方法进行详细阐述。 首先,torch_sparse是PyTorch生态系统中的一个重要...

    torch_sparse-0.6.10-cp36-cp36m-linux_x86_64whl.zip

    此外,`torch_sparse`还包含一些辅助函数,如`coalesce()`用于合并重复的非零元素,`transpose()`用于转置稀疏张量,以及`resize_()`用于调整稀疏张量的大小。这些功能使得在构建和训练GNN模型时,可以对稀疏数据...

    torch_sparse-0.6.2-cp38-cp38-linux_x86_64whl.zip

    3. torch.sparse.Tensor.coalesce():将稀疏张量转换为有效形式,确保每个索引只有一个非零值。 4. torch.sparse.Tensor.to_dense():将稀疏张量转换为稠密张量,方便与其他PyTorch操作配合使用。 三、安装torch_...

    Dynamic T-SQL

    我们将基于一个实际的数据库——Northwind 示例数据库来进行讨论。 #### Northwind 数据库 Northwind 数据库是 Microsoft 提供的一个示例数据库,广泛用于 SQL Server 的教学和演示中。它包含了典型的业务场景,如...

Global site tag (gtag.js) - Google Analytics