字符编码相关函数
use TEST go --获取ASCII码对应的字符CHAR --如果是INT 数据类型的ASCII码,可以通过CHAR函数获得该ASCII码对应的字符 --CHAR(integer_expression) 这里是返回0-255之间的整数表达式,返回值为CHAR类型字符 /* DECLARE @BeginPosition int declare @TempString varchar(100) set @BeginPosition = 1 set @TempString = 'dancewithwave@163.com' WHILE @BeginPosition < = DATALENGTH(@TempString) BEGIN SELECT ASCII(SUBSTRING(@tempstring , @beginPosition , 1 )) as 'ASCII码', CHAR (ASCII(SUBSTRING(@tempstring , @beginPosition , 1 )) ) as '字符' SET @BeginPosition=@BeginPosition+1 END GO */ --获取字符的Unicode编码UNICODE Unicode(统一字符编码标准)主要用于支持非英语语种的字符型数据,采用两个字节来存储一个字符。 在定义和使用Unicode字符型数据时,需要加入前导标识符N,当向表中录入Unicode字符时并不会存储该标识符 Unicode函数可以获得字符的Unicode编码 ----语法: UNICODE('ncharacter_expression') 这里的ncharacter_expression 是nchar 或者nvarchar类型的表达式, 函数仅会返回第一个字符的Unicode编码 ,返回类型为INT数据类型 DECLARE @BeginPosition int declare @NTempString Nvarchar(100) set @BeginPosition = 1 set @NTempString = N'dancewithwave@163.com' WHILE @BeginPosition < = DATALENGTH(@NTempString) BEGIN SELECT @BeginPosition AS '序号', CONVERT ( CHAR(17), SUBSTRING(@NTempString , @beginPosition , 1 ) ) as 'ASCII码', UNICODE (SUBSTRING(@NTempString , @beginPosition , 1 ) ) as '字符' SET @BeginPosition=@BeginPosition+1 END GO --获取Unicode编码对应的字符NCHAR /* NCHAR函数根据Unicode标准的定义,返回具有指定的整数代码Unicode字符 NCHAR (INTEGER_EXPRESSION) 这里的INTEGER_EXPRESSION是介于0-65535之间的正整数,超出该值将返回错误。 返回值为UNicode字符 */ DECLARE @BeginPosition int declare @NTempString Nvarchar(100) set @BeginPosition = 1 set @NTempString = N'dancewithwave@163.com' WHILE @BeginPosition < = DATALENGTH(@NTempString) BEGIN SELECT @BeginPosition AS '序号', NCHAR(UNICODE (SUBSTRING(@NTempString , @beginPosition , 1 ) ) ) as 'NCHAR 函数获得的字符', CONVERT ( CHAR(17), SUBSTRING(@NTempString , @beginPosition , 1 ) ) as 'COUNVER 函数强制转换获得的字符', UNICODE (SUBSTRING(@NTempString , @beginPosition , 1 ) ) as 'Unicode编码' SET @BeginPosition=@BeginPosition+1 END GO --获取字符串第一次出现位置PATINDEX PATINDEX :返回指定表达式中某模式第一次出现的起始位置,如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零 PATINDEX('%pattern%' , expression) 如果是EXPRESSION的数据类型为 VARCHAR(MAX) 或者 NVARCHAR(MAX)则为BIGINT , 否则为INT 即PATTERN指定的字符串在EXPRESSION中第一次出现的位置 EG: select top 10 PATINDEX('%35%',a.Name),* from dbo.TEST as a with(nolock) --生成空格字符SPACE SPACE 函数可以生成任意多个空格组成的字符串 SPACE( INEGER_EXPRESSION ) 这里的INEGER_EXPRESSION为指示空格个数的正整数。 如果是要在Unicode数据中包含空格超过8000个以上的空格,需要使用REPLICATE函数 返回CHAR 数据类型的字符 USE TEST GO SELECT customerid,RTRIM(customerid) + ',' + SPACE(4) + LTRIM(city) FROM Customers --按指定次数重复生成字符串REPLACE REPLACE 函数可以按照指定的整数次数,重复生成一个字符串形式的表达式,结果为字符串. 语法结构 REPLACE( CHARACTER_EXPRESSION , INTEGER_EXPRESSION ) --截取子串SUBSTRING SUBSTRING 函数可以字符串进行子串的截取操作 SUBSTRING ( EXPRESSION , START ,LENGTH ) 如果EXPRESSION是受支持的字符数据类型,则返回字符数据 如果EXPRESSION是受支持的BINARY数据类型,则则返回二进制数据 --获取字符串长度LEN LEN函数获取字符串的长度(字符数),但不包括右边的空格,左边的空格和中间的空格计算在内 LEN( STRING_EXPRESSION ) --测试空格在不同位置时返回的字符 DECLARE @TempString varchar(100) DECLARE @TempString1 varchar(100) declare @tempString2 varchar(100) declare @tempString3 varchar(100) --不包含空格的字符串 SET @TempString = 'dancewithwave@163.com' --左边有个空格的字符串 SET @TempString1 = ' dancewithwave@163.com' --右边有个空格的字符串 SET @tempString2 = 'dancewithwave@163.com ' --左右都有两个空格的字符串 SET @tempString3 = ' dancewithwave@163.com ' SELECT LEN(@TempString) SELECT LEN(@TempString1) SELECT LEN(@tempString2) SELECT LEN(@tempString3) --替换字符串中内容STUFF --STUFF函数用于在指定的字符串中删除指定长度的字符,并在起点处插入另外一组字符 STUFF (Source_character_expression , START , LENGTH , Destination_character_expression) --返回值,如果character_expression是受支持的字符数据类型,则返回字符数据。 如果character_expression是一个受支持的binary数据类型,则返回二进制数据 SELECT STUFF('dancewithwave@163.com' , 1 , 13 , 'zhaosongtao' ) /* 指定位置搜索字符串中内容charindex charindex函数用于在指定字符串中搜索特定的字符串,并可以指定开始搜索的位置,则返回第一次目标字符串的字符数。 如果EXPRESSION2的数据类型为VARCHAR(MAX),NVARCHAR(MAX) 或者 VARBINARY(MAX) 则为BIGINT,否则为INT */ DECLARE @SourceTempString varchar(200) declare @DestinationTempString varchar(200) SET @SourceTempString = 'AGDFGHEHJFGHWPEHNVDHG[ DSGDGDL ] DFGDKGHWEH[FWDFGWRG' SET @DestinationTempString='H' SELECT CHARINDEX(@DestinationTempString,@SourceTempString,1) /*生成带分隔符的Unicode字符串quotename QUOTENAME函数用于生成带有分隔符的Unicode 字符串 可以是单引号('),左方括号,或右方括号([])或者英文双引号(") */ QUOTENAME('CHARACTER_STRING' [ , 'QUOTE_CHARACTER' ] ) --生成带有分隔符的字符串长度不能超过258 SELECT QUOTENAME('ABC[]DEF') /* STR函数用于将浮点数据转换为字符串 STR(FLOAT_EXPRESSION[ , LENGTH ,[ , DECIMAL ]]) --CHAR 字长字符串 */ SELECT STR(123.457 , 7 ,3) + SPACE(2) + 'ABCD' 载取左边字符串 LEFT 载取右边字符串 RIGHT 截取左边空格 LTRIM 截取右边空格 RTRIM 转换为小写字符串 LOWER 转换为大写字符串 UPPER 反序字符串 REVERSE 获取字符串字符数 ( DATALENGTH )
--摘自《t-sql管理与开发实例精粹》