乙個非常有用的函式 COALESCE

2022-06-14 07:06:11 字數 2780 閱讀 9226

很多人知道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 plain

copy

create table #checksumtest   

(  id int identity ,  

num int default ( rand() * 100 ) ,  

rowchecksum as coalesce( checksum( id , num ) , 0 ) persisted primary key  

);  

[sql]view plain

copy

select  coalesce(null, null, getdate())  

由於兩個引數都為null,所以返回getdate()函式的值,也就是當前時間。即返回第乙個非空的值。由於這個函式是返回第乙個非空的值,所以引數裡面必須最少有乙個非空的值,如果使用下面的查詢,將會報錯:

[sql]view plain

copy

select  coalesce(null, null, null)  

[sql]view plain

copy

select  name  

from    humanresources.department  

where   ( groupname= 'executive generaland administration' )  

會得到下面的結果:

[sql]view plain

copy

declare @departmentname varchar(1000)  

select  @departmentname = coalesce(@departmentname, '') + name + ';'  

from    humanresources.department  

where   ( groupname= 'executive generaland administration' )  

select  @departmentname as departmentnames  

當你知道這個函式可以進行扭轉之後,你也應該知道它可以執行多條sql命令。並且使用分號來區分獨立的操作。下面語句是在person架構下,有名字為name的列的值:

[sql]view plain

copy

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 plain

copy

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。

qt4 0乙個非常有用的類QSettings

qt4.0乙個非常有用的類qsettings qsettings是qt4.0提供的乙個讀取配置檔案的類,在windows平台,它提供了ini檔案讀些,登錄檔讀寫的功能。我就簡單點隨便介紹介紹它的使用吧 qsettings format有兩種 qsettings nativeformat在window...

qt4 0乙個非常有用的類QSettings

qt4.0乙個非常有用的類qsettings qsettings是qt4.0提供的乙個讀取配置檔案的類,在windows平台,它提供了ini檔案讀些,登錄檔讀寫的功能。而且使用也非常簡單。大家可以參照它的示例 qtdirexamplestoolssettingseditor 我就簡單點隨便介紹介紹它...

兩個常用的非常有用excel函式

list 查詢函式 vlookup lookup value,array,columindexnum,ranglookup list 有如圖所示資料,我們要查詢相對a1的c1 vlookup a1,a1 c6,3,false 結果為c1.a1是我們要查詢的值。a1 c6,查詢的範圍。3,相對於a1偏...