字符编码相关函数

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管理与开发实例精粹》

原文地址:https://www.cnblogs.com/zerocc/p/2540600.html