本篇文章仍是学习《程序员的SQL金典》内容的记录,这次将讲解的是SQL SERVER经常使用的其它函数。(其它数据库这里就不罗列了,想看更多的能够关注《程序员的SQL金典》)。程序员
具体的其余函数包括:类型转换的函数、空值处理的函数、流程控制函数、SQL SERVER独有函数。数据库
类型转换的函数 |
CAST ( expression AS data_type)函数 CONVERT ( data_type, expression)函数express
上面两个函数都是SQL SERVER提供的支持类型转换的函数。参数expression为待进行类型转换的表达式(即须要待转换的数据),而data_type为转换的目标类型(即待转换后的类型)。函数
SELECT CAST('-30' AS INTEGER) as i, CONVERT(DECIMAL,'3.1415726') as d, CONVERT(DATETIME,'2008-08-08 08:09:10') as dt
空值处理的函数 |
COALESCE ( expression,value1,value2……,valuen)函数:处理空值问题的函数,返回包括expression在内的全部参数中的第一个非空表达式。其中expression为待检测的表达式,而其后的参数个数不固定,能够多个。若是expression不为空值则返回expression;不然判断value1是否为空,若是不为空值则返回value1;不然判断value2是否为空,若是不为空值则返回value2;……以此类推,若是COALESCE函数里的参数全为NULL就会出错了,由于COALESCE函数的功能其实就是为了不出现不想要的NULL值。学习
SELECT FName,FBirthDay,FRegDay, COALESCE(FBirthDay,FRegDay,'2008-08-08') AS ImportDay FROM T_Person
ISNULL(expression,value)函数:这个函数也是空值处理的函数,是COALESCE( )函数的简化版,只支持两个参数。其中expression为待检测的表达式,若是expression不为空值则返回expression,不然判断value是否为空,若是不为空值则返回value,若是都为空,则返回空。测试
SELECT FBirthDay,FRegDay, ISNULL(FBirthDay,FRegDay) AS ImportDay FROM T_Person
NULLIF ( expression1 , expression2 )函数:这个函数也是空值处理的函数,主要是判断两个表达式是否等价,若是等价,则返回空,若是不等价,侧返回第一个expression1的值。须要注意的意,第一个表达式expression1不能为空。spa
SELECT FBirthDay,FRegDay, NULLIF(FBirthDay,FRegDay) FROM T_Person
流程控制函数 |
SQL SERVER提供了流程控制函数,相似于咱们代码里面的的SWITCH……CASE语句。那就是CASE函数,这个函数有以下两种运用方法。code
CASE函数的语法以下:orm
用法一:blog
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
CASE函数对表达式expression进行测试,若是expression等于value1则返回returnvalue1,若是expression等于value2则返回returnvalue2,expression等于value3则返回returnvalue3,……以此类推,若是不符合全部的WHEN条件,则返回默认值defaultreturnvalue。
SELECT FName, (CASE FName WHEN 'Tom' THEN 'GoodBoy' WHEN 'Lily' THEN 'GoodGirl' WHEN 'Sam' THEN 'BadBoy' WHEN 'Kerry' THEN 'BadGirl' ELSE 'Normal' END) as isgood FROM T_Person
用法二:
CASE WHEN condition1 THEN returnvalue1 WHEN condition 2 THEN returnvalue2 WHEN condition 3 THEN returnvalue3 …… ELSE defaultreturnvalue END
其中的condition1 、condition 二、condition 3……为条件表达式,CASE函数对各个表达式从前向后进行测试,若是条件condition1为真则返回returnvalue1,不然若是条件condition2为真则返回returnvalue2,不然若是条件condition3为真则返回returnvalue3,……以此类推,若是不符合全部的WHEN条件,则返回默认值defaultreturnvalue。
SELECT FName, FWeight, (CASE WHEN FWeight<40 THEN 'thin' WHEN FWeight>50 THEN 'fat' ELSE 'ok' END) as isnormal FROM T_Person
SQL SERVER独有函数 |
PATINDEX ( '%pattern%' , expression )函数:不一样于CHARINDEX()函数,只能计算字符串中指定表达式的开始位置。PATINDEX ( '%pattern%' , expression )函数提供了更加灵活的方式,它返回指定表达式中模式'%pattern%'第一次出现的起始位置;若是在所有有效的文本和字符数据类型中没有找到该模式,则返回零。在模式中可使用通配符。
SELECT FName,PATINDEX('%_m%',FName) FROM T_Person
REPLICATE (str,count)函数:用来获得一个由子字符串重复了若干次所组成的字符串,其中参数str为子字符串,而count为重复次数。(其实就是一个复制函数)。
SELECT FName,FWeight, CAST(FWeight/20 AS INT), REPLICATE(FName, CAST(FWeight/20 AS INT)) FROM T_Person
REVERSE(expression)函数:将一个字符串的顺序颠倒。
SELECT FName, REVERSE(FName) FROM T_Person
ISDATE(expression)函数:用来肯定输入表达式是否为有效日期。若是输入表达式是有效日期,那么ISDATE 返回 1;不然,返回 0。expression参数为要验证其是否为日期的表达式。expression能够是text、ntext 表达式和image 表达式之外的任意表达式,能够隐式转换为nvarchar。
SELECT ISDATE(NULL) as d1, ISDATE('13/43/3425') as d2, ISDATE('1995-10-1a') as d3, ISDATE(19920808) as d4, ISDATE('1/23/95') as d5, ISDATE('1995-10-1') as d6, ISDATE('19920808') as d7, ISDATE(' Abc') as d8
ISNUMERIC ( expression )函数:用来肯定表达式是否为有效的数值类型。若是输入表达式的计算值为有效的整数、浮点数、money 或decimal 类型时,ISNUMERIC 返回 1;不然返回 0。
SELECT ISNUMERIC(NULL) as d1, ISNUMERIC('13/43/3425') as d2, ISNUMERIC('30a.8') as d3, ISNUMERIC(19920808) as d4, ISNUMERIC('1/23/95') as d5, ISNUMERIC('3E-3') as d6, ISNUMERIC('19920808') as d7, ISNUMERIC('-30.3') as d8