SQL 集合运算及常用函数
SQL  函数
一、字符转换函数
1. ASCII ()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
SELECT ASCII('iTalkbb')
----------
105       
2. CHAR ()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
SELECT char(105)
----------
3. LOWER ()
LOWER()将字符串全部转为小写;
SELECT lower('iTalkbb'),upper('iTalkbb')
----------  ----------
italkbb    ITALKBB   
4. UPPER ()
UPPER()将字符串全部转为大写。
SELECT lower('iTalkbb'),upper('iTalkbb')
----------  ----------
italkbb    ITALKBB   
5. STR ()
把数值型数据转换为字符型数据。
STR (<float_expression>[,length[, <decimal>]])
length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数小于length ,左边补足空格。
SELECT STR(123.45, 6, 1);
----------
  123.5 
二、去空格函数
1. LTRIM ()
把字符串头部的空格去掉。
SELECT ltrim('    iTalkBB')
----------
iTalkBB 
2. RTRIM ()
把字符串尾部的空格去掉。
SELECT rtrim('iTalkBB    ')
----------
iTalkBB 
三、取子串函数
1. LEFT ()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
SELECT left('iTalkbb',2)
----------
iT   
2. RIGHT ()
RIGHT (<character_expression>, <integer_expression>)
返回character_expression 右起 integer_expression 个字符。
datediff是字符型函数
SELECT RIGHT('iTalkbb',2)
----------
bb     
3. SUBSTRING ()
SUBSTRING (<expression>, <starting_ position>, length)
返回从字符串左边第starting_ position 个字符起length个字符的部分。
SELECT SUBSTRING('iTalkbb',2,4)
----------
Talk   
四、字符串比较函数
1. CHARINDEX ()
返回字符串中某个指定的子串出现的开始位置。
CHARINDEX (<’substring_expression’>, <expression>)
其中substring _expression 是所要查的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
此函数不能用于TEXT 和IMAGE 数据类型。
SELECT CHARINDEX('a','italkbb')
----------
3   
SELECT CHARINDEX('Hooyes’,’ ItalkBB')
----------
0   
2. PATINDEX ()
返回字符串中某个指定的子串出现的开始位置。
PATINDEX (<’%substring _expression%’>, <column_ name>)其中子串表达式前后必须有百分号“%”否则返回值为0。
与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。
SELECT PATINDEX('AB%','1ABCD')
----------
0   
SELECT PATINDEX('%AB','1ABCD')
----------
SELECT CHARINDEX('AB','1ABCD')
----------
2   
SELECT PATINDEX('%[B,C,0-9]%','XYZABC123')
----------
五、字符串操作函数
1. QUOTENAME ()
返回被特定字符括起来的字符串。
QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。
SELECT QUOTENAME('iTalkbb'
----------
[iTalkbb] 
SELECT QUOTENAME('iTalkbb','<>')
----------
<iTalkbb>
2. REPLICATE ()
返回一个重复character_expression 指定次数的字符串。
REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。
SELECT REPLICATE('iTalkBB',2)
--------------
iTalkBBiTalkBB
3. REVERSE ()
将指定的字符串的字符排列顺序颠倒。
REVERSE (<character_expression>) 其中character_expression 可以是字符串、常数或一个列的值。
SELECT REVERSE('iTalkBB')
----------
BBklaTi 
4. REPLACE ()
返回被替换了指定子串的字符串。
REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用string_expression3 替换在string_expression1 中的子串string_expression2。
SELECT REPLACE('iTalkBB','BB','MOBO')
----------
iTalkMOBO 
5. SPACE ()
返回一个有指定长度的空白字符串。
SPACE (<integer_expression>) 如果integer_expression 值为负值,则返回NULL 。
SELECT 'i'+SPACE(2)+'am'
----------
i  am
6. STUFF ()
用另一子串替换字符串指定位置、长度的子串。
STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)
如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。
如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。
SELECT STUFF('www.italkbb',5,7,'mobo')
------------
bo
例1:查询信用卡的表,要求只显示前两位和后4位,中间用星号显示。
SELECT  STUFF(CREDIT_CARD,3,LEN(CREDIT_CARD)-6 ,REPLICATE('*',LEN(CREDIT_CARD)-6))  FROM ACCOUNT_CC
------------------
40**********9900 
40**********0130 
40**********2623 
例2:查询用户Email 要示Email只显示前1位和@后面的内容。
SELECT  top 100 STUFF(EMAIL,2,charindex('@',EMAIL)-2,REPLICATE('*',charindex('@',EMAIL)-2)) from MEMBER
order by acctid
--------------------------
t***********@yahoo   
c*******@hotmail     
w*****@comcast       
t***@yahoo           
a**********@hotmail   
l***@gmu.edu             
y******@gmail         
b*******@gmail       
7. LEN ()