JOJ
踏踏实实做人,认认真真做事!放纵自己就是毁灭自己!

/************************************************/
                    --字符串函数
/************************************************/

PRINT CHAR(ASCII('A')) 

--返回hello中第一次出现L的位置
--(这里有个奇怪的现象,只有在AdventureWorks数据库中,前面的L字符需要区分大小写,应该是该数据库设置了什么地方吧)
PRINT CHARINDEX('L','helLo WORLD')-- [AdventureWorks:4, 其他数据库:3]

--貌似这个函数和CHARINDEX区别不大,其实这个更强大
PRINT PATINDEX('%L%','hello world') -- [AdventureWorks:4, 其他数据库:3]
--模式wl在表达式中找不到(0), [wl]表示在w,l中任意一个,在hello world中在位置(3)找到l
--[^wl]:表示不在wl的任何字符,在(1)处找到h
SELECT PATINDEX('%wl%','hello world'),PATINDEX('%[wl]%','hello world'),PATINDEX('%[^wl]%','hello world') --[0,3,1]

--DIFFERENCE 该函数实则比较两个字符串的SOUNDEX()值相似度[3]
SELECT SOUNDEX('hell'), SOUNDEX('hello'), DIFFERENCE('el','hello')

PRINT LEFT('hello world',4) -- 取左边个字符[hell]

PRINT RIGHT('hello world',6) --取右边个字符, 可以用Len()检验[ world]

PRINT LEN(RIGHT('hello world',5)) --表达式里面的字符长度[5]

SELECT LEN(RTRIM(LTRIM('  HELLO world   '))), LEN('  HELLO world   '), LEN('  HELLO world')--切忌LEN函数只计算左边和字符中间的空格,不计算右边的空格[11,13,13]

PRINT LOWER('HELLO woRLd') --转为小写[hello word]

PRINT UPPER('HELLO world') --转为大写[HELLO WORD]

SELECT LEN('   HELLO world'),  LEN(LTRIM('   HELLO world')) --去掉左边空格[14,11]

SELECT LEN('HELLO world  '),LEN(RTRIM('HELLO world   ')),RTRIM(' HELLO world  ') --去掉右边空格[11,11,  HELLO world]

SELECT LEN(RTRIM(LTRIM('  HELLO world   '))),RTRIM(LTRIM('  HELLO world   '))-- 去掉左右空格[11,HELLO world]

PRINT REVERSE('HELLO world  ') --反转表达式[  dlrow OLLEH]

PRINT 'hello'+SPACE(4)+'world' --获取空格, [hello    world]

/*
    char a =  STR ( float_expression [ , length [ , decimal ] ] );
    length:总长度。它包括小数点、符号、数字以及空格。默认值为10。
    decimal:小数点后的位数。decimal 必须小于或等于16。如果decimal  大于16,则会截断结果,使其保持为小数点后具有十六位。
    返回:char类型
    注意: length应该不小于float_expression表达式整数部分的位数,否则将显示length 个* ;  length >= LEN(FLOOR(float_expression))
    为了不让左边空格补充: length = LEN(FLOOR(float_expression))+1(小数点)+小数位数
*/
PRINT  STR(1223445.3,2) --因为小于整数部分个数(7)位 [**]
PRINT  STR(1223445.3,5) --因为小于整数部分个数(7)位 [*****]

DECLARE @num FLOAT 
SET @num= 323.14159  
--如果不足length,则左边已空格补充
SELECT LEN(STR(@num,10,2)),STR(@num,10,2) [10,    323.14]
--LEN(FLOOR(@num))+1+2 : 这里表示整数位数+小数点+小数个数
SELECT  STR(@num,LEN(FLOOR(@num))+3,2) ,CAST(STR(@num,10,2) AS FLOAT)

--从表达式的位置(空格),取个字符( w),然后用DELETE替换刚才找到的两个字符
PRINT STUFF('hello world',6,2,'DELETE') --[helloDELETEorld]

/*
    SUBSTRING ( value_expression ,start_expression , length_expression )
    0<=start_expression<=LEN(value_expression)
    0<=length_expression<=LEN(value_expression)
    从value_expression位置start_expression取length_expression个字符
*/
PRINT SUBSTRING('hello world',2,6) --[ello w]

以上函数也是自己学习的笔记,当然你要合适的用到项目中去,就要看你自己的需求了!

Technorati 标签: sqlserver,字符串函数

posted on 2010-08-14 12:09  JoinJ  阅读(1979)  评论(0编辑  收藏  举报