zoukankan      html  css  js  c++  java
  • SQL內置Function字符串函数

    字符串函数

    这些标量函数对字符串输入值执行操作,返回字符串或数字值。

    ASCII

    NCHAR

    SOUNDEX

    CHAR

    PATINDEX

    SPACE

    CHARINDEX

    REPLACE

    STR

    DIFFERENCE

    QUOTENAME

    STUFF

    LEFT

    REPLICATE

    SUBSTRING

    LEN

    REVERSE

    UNICODE

    LOWER

    RIGHT

    UPPER

    LTRIM

    RTRIM

     

     

    除 CHARINDEX 和 PATINDEX 外的所有其它内置字符串函数都具有确定性。每次用一组给定的输入值调用它们时,都返回相同的值。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

    1ASCII

    返回字符表达式最左端字符的 ASCII 代码值。

    语法

    ASCII ( character_expression )

    参数

    character_expression

    是类型为 char 或 varchar的表达式。

    返回类型

    int

    示例

    下例假定在 ASCII 字符集环境下运行,它将返回字符串"Du Monde entier"中每一个字符的 ASCII 值和 char 字符。

    SET TEXTSIZE 0
    SET NOCOUNT ON
    -- Create the variables for the current character string position 
    -- and for the character string.
    DECLARE @position int, @string char(15)
    -- Initialize the variables.
    SET @position = 1
    SET @string = 'Du monde entier'
    WHILE @position <= DATALENGTH(@string)
       BEGIN
       SELECT ASCII(SUBSTRING(@string, @position, 1)),
          CHAR(ASCII(SUBSTRING(@string, @position, 1)))
        SET @position = @position + 1
       END
    SET NOCOUNT OFF
    GO

    下面是结果集:

    ----------- - 
    68          D 
                  
    ----------- - 
    117         u 
                  
    ----------- - 
    32            
                  
    ----------- - 
    109         m 
                  
    ----------- - 
    111         o 
                  
    ----------- - 
    110         n 
                  
    ----------- - 
    100         d 
                  
    ----------- - 
    101         e 
                  
    ----------- - 
    32            
                  
    ----------- - 
    101         e 
                  
    ----------- - 
    110         n 
                  
    ----------- - 
    116         t 
                  
    ----------- - 
    105         i 
                  
    ----------- - 
    101         e 
                  
    ----------- - 
    114         r

    2CHAR

    将 int ASCII 代码转换为字符的字符串函数。

    语法

    CHAR ( integer_expression )

    参数

    integer_expression

    介于 0 和 255 之间的整数。如果整数表达式不在此范围内,将返回 NULL 值。

    返回类型

    char(1)

    注释

    CHAR 可用于将控制字符插入字符串中。下表显示了一些常用的控制字符。

    控制字符

    制表符

    CHAR(9)

    换行符

    CHAR(10)

    回车

    CHAR(13)

     

    示例
    A. 使用 ASCII 和 CHAR 打印字符串的 ASCII 值

    下面的示例将打印字符串"New Moon"中每个字符的 ASCII 值和字符。

    SET TEXTSIZE 0
    -- Create variables for the character string and for the current 
    -- position in the string.
    DECLARE @position int, @string char(8)
    -- Initialize the current position and the string variables.
    SET @position = 1
    SET @string = 'New Moon'
    WHILE @position <= DATALENGTH(@string)
       BEGIN
       SELECT ASCII(SUBSTRING(@string, @position, 1)), 
          CHAR(ASCII(SUBSTRING(@string, @position, 1)))
       SET @position = @position + 1
       END
    GO

    下面是结果集:

    ----------- - 
    78          N 
                  
    ----------- - 
    101         e 
                  
    ----------- - 
    119         w 
                  
    ----------- - 
    32            
                  
    ----------- - 
    77          M 
                  
    ----------- - 
    111         o 
                  
    ----------- - 
    111         o 
                  
    ----------- - 
    110         n 
                  
    ----------- - 
    B. 使用 CHAR 插入控制字符

    下例使用 CHAR(13) 在不同的行上打印名称、地址与城市信息,并以文本方式返回结果。

    USE Northwind
    SELECT FirstName + ' ' + LastName, + CHAR(13) + Address, 
       + CHAR(13) + City, + Region 
    FROM Employees
    WHERE EmployeeID = 1

    下面是结果集:

    Nancy Davolio
    507 - 20th Ave. E.
    Apt. 2A
    Seattle            WA

    说明  在此记录中,Address 列中的数据也包含一个控制字符。

    3CHARINDEX

    返回字符串中指定表达式的起始位置。

    语法

    CHARINDEX ( expression1 , expression2 [ , start_location ] )

    参数

    expression1

    一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。

    expression2

    一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。

    start_location

    在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。

    返回类型

    int

    注释

    如果 expression1 或 expression2 之一属于 Unicode 数据类型(nvarchar 或 nchar)而另一个不属于,则将另一个转换为 Unicode 数据类型。

    如果 expression1 或 expression2 之一为 NULL 值,则当数据库兼容级别为 70 或更大时,CHARINDEX 返回 NULL 值。当数据库兼容级别为 65 或更小时,CHARINDEX 仅在 expression1 和 expression2 都为 NULL 时返回 NULL 值。

    如果在 expression2 内没有找到 expression1,则 CHARINDEX 返回 0。

    示例

    第一个代码示例返回序列"wonderful"在 titles 表的 notes 列中开始的位置。第二个示例使用可选的 start_location 参数从 notes 列的第五个字符开始寻找"wonderful"。第三个示例显示了当 expression2 内找不到 expression1 时的结果集。

    USE pubs
    GO
    SELECT CHARINDEX('wonderful', notes)
    FROM titles
    WHERE title_id = 'TC3218'
    GO
     
    -- Use the optional start_location parameter to start searching 
    -- for wonderful starting with the fifth character in the notes
    -- column.
    USE pubs
    GO
    SELECT CHARINDEX('wonderful', notes, 5)
    FROM titles
    WHERE title_id = 'TC3218'
    GO

    下面是第一个查询和第二个查询的结果集:

    ----------- 
    46          
     
    (1 row(s) affected)
     
    USE pubs
    GO
    SELECT CHARINDEX('wondrous', notes)
    FROM titles
    WHERE title_id='TC3218'
    GO
     
    下面是结果集。
    ----------- 
    0          
     
    (1 row(s) affected)

    4DIFFERENCE

    以整数返回两个字符表达式的 SOUNDEX 值之差。

    语法

    DIFFERENCE ( character_expression , character_expression )

    参数

    character_expression

    是类型 char 或 varchar 的表达式。

    返回类型

    int

    注释

    返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等,4 表示 SOUNDEX 值相同。

    示例

    在下例的第一部分,比较两个相差很小的字符串的 SOUNDEX 值,DIFFERENCE 返回的值是 4。在下例的第二部分,比较两个相差很大的字符串的 SOUNDEX 值,DIFFERENCE 返回的值是 0。

    USE pubs
    GO
    -- Returns a DIFFERENCE value of 4, the least possible difference.
    SELECT SOUNDEX('Green'),
     SOUNDEX('Greene'), DIFFERENCE('Green','Greene')
    GO
    -- Returns a DIFFERENCE value of 0, the highest possible difference.
    SELECT SOUNDEX('Blotchet-Halls'),
     SOUNDEX('Greene'), DIFFERENCE('Blotchet-Halls', 'Greene')
    GO

    下面是结果集:

    ----- ----- ----------- 
    G650 G650 4           
     
    (1 row(s) affected)
                            
    ----- ----- ----------- 
    B432 G650 0           
     
    (1 row(s) affected)

    5LEFT

    返回从字符串左边开始指定个数的字符。

    语法

    LEFT ( character_expression , integer_expression )

    参数

    character_expression

    字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐式地转换为 varchar 的数据类型。否则,请使用 CAST 函数显式转换 character_expression。

    integer_expression

    是正整数。如果 integer_expression 为负,则返回空字符串。

    返回类型

    varchar

    注释

    兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。

    示例
    A. 对列使用 LEFT 函数

    下面的示例返回每个书名最左边的 5 个字符。

    USE pubs
    GO
    SELECT LEFT(title, 5) 
    FROM titles
    ORDER BY title_id
    GO

    下面是结果集:

    ----- 
    The B 
    Cooki 
    You C 
    Strai 
    Silic 
    The G 
    The P 
    But I 
    Secre 
    Net E 
    Compu 
    Is An 
    Life 
    Prolo 
    Emoti 
    Onion 
    Fifty 
    Sushi 
     
    (18 row(s) affected)
    B. 对字符串使用 LEFT 函数

    下面的示例使用 LEFT 函数返回字符串 abcdefg 最左边的 2 个字符。

    SELECT LEFT('abcdefg',2)
    GO

    下面是结果集:

    -- 
    ab 
     
    (1 row(s) affected)

     

    6LEN

    返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

    语法

    LEN ( string_expression )

    参数

    string_expression

    要计算的字符串表达式。

    返回类型

    int

    示例

    下面的示例选定字符个数和位于芬兰的公司的 CompanyName 数据。

    USE Northwind
    GO
    SELECT LEN(CompanyName) AS 'Length', CompanyName
    FROM Customers
    WHERE Country = 'Finland'

    下面是结果集:

    Length       CompanyName
    ----------- ------------------------------
    14           Wartian Herkku
    11           Wilman Kala

    7LOWER

    将大写字符数据转换为小写字符数据后返回字符表达式。

    语法

    LOWER ( character_expression )

    参数

    character_expression

    是字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。

    返回类型

    varchar

    示例

    下例在选择价格位于 $11 和 $20 间的书名时,使用 LOWER 函数、UPPER 函数并把 UPPER 函数嵌套在 LOWER 函数内。

    USE pubs
    GO
    SELECT LOWER(SUBSTRING(title, 1, 20)) AS Lower, 
       UPPER(SUBSTRING(title, 1, 20)) AS Upper, 
       LOWER(UPPER(SUBSTRING(title, 1, 20))) As LowerUpper
    FROM titles
    WHERE price between 11.00 and 20.00
    GO

    下面是结果集:

    Lower                   Upper                   LowerUpper           
    --------------------    --------------------    -------------------- 
    the busy executive's    THE BUSY EXECUTIVE'S    the busy executive's 
    cooking with compute    COOKING WITH COMPUTE    cooking with compute 
    straight talk about     STRAIGHT TALK ABOUT     straight talk about 
    silicon valley gastr    SILICON VALLEY GASTR    silicon valley gastr 
    secrets of silicon v    SECRETS OF SILICON V    secrets of silicon v 
    prolonged data depri    PROLONGED DATA DEPRI    prolonged data depri 
    fifty years in bucki    FIFTY YEARS IN BUCKI    fifty years in bucki 
    sushi, anyone?          SUSHI, ANYONE?          sushi, anyone?       
     
    (8 row(s) affected)

    8LTRIM

    删除起始空格后返回字符表达式。

    语法

    LTRIM ( character_expression )

    参数

    character_expression

    是字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。

    返回类型

    varchar

    注释

    兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。

    示例

    下例使用 LTRIM 字符删除字符变量中的起始空格。

    DECLARE @string_to_trim varchar(60)
    SET @string_to_trim = '     Five spaces are at the beginning of this
       string.'
    SELECT 'Here is the string without the leading spaces: ' + 
       LTRIM(@string_to_trim)
    GO

    下面是结果集:

    ------------------------------------------------------------------------
    Here is the string without the leading spaces: Five spaces are at the beginning of this string.             
     
    (1 row(s) affected)

    9NCHAR

    根据 Unicode 标准所进行的定义,用给定整数代码返回 Unicode 字符。

    语法

    NCHAR ( integer_expression )

    参数

    integer_expression

    介于 0 与 65535 之间的所有正整数。如果指定了超出此范围的值,将返回 NULL。

    返回类型

    nchar(1)

    示例
    A. 使用 NCHAR 和 UNICODE

    下面的示例使用 UNICODE 和 NCHAR 函数打印字符串 Køenhavn 第二个字符的 UNICODE 值和 NCHAR(Unicode 字符),并打印实际的第二个字符ø。

    DECLARE @nstring nchar(8)
    SET @nstring = N'København'
    SELECT UNICODE(SUBSTRING(@nstring, 2, 1)), 
       NCHAR(UNICODE(SUBSTRING(@nstring, 2, 1)))
    GO

    下面是结果集:

    ----------- - 
    248         ø(1 row(s) affected)
    B. 使用 SUBSTRING、UNICODE、CONVERT 和 NCHAR

    下面的示例使用 SUBSTRING、UNICODE、CONVERT 和 NCHAR 函数打印字符串 Køenhavn 的字符数、Unicode 字符以及每个字符的 UNICODE 值。

    -- The @position variable holds the position of the character currently
    -- being processed. The @nstring variable is the Unicode character 
    -- string to process.
    DECLARE @position int, @nstring nchar(9)
    -- Initialize the current position variable to the first character in 
    -- the string.
    SET @position = 1
    -- Initialize the character string variable to the string to process.
    -- Notice that there is an N before the start of the string, which 
    -- indicates that the data following the N is Unicode data.
    SET @nstring = N'København'
    -- Print the character number of the position of the string you're at, 
    -- the actual Unicode character you're processing, and the UNICODE value -- for this particular character.
    PRINT 'Character #' + ' ' + 'Unicode Character' + ' ' + 'UNICODE Value'
    WHILE @position <= DATALENGTH(@nstring)
       BEGIN
       SELECT @position, 
          NCHAR(UNICODE(SUBSTRING(@nstring, @position, 1))),
          CONVERT(NCHAR(17), SUBSTRING(@nstring, @position, 1)),
          UNICODE(SUBSTRING(@nstring, @position, 1))
       SELECT @position = @position + 1
       END
    GO

    下面是结果集:

    Character # Unicode Character UNICODE Value
                                              
    ----------- ----------------- ----------- 
    1           K                 75          
                                              
    ----------- ----------------- ----------- 
    2           ø                 248         
                                              
    ----------- ----------------- ----------- 
    3           b                 98          
                                              
    ----------- ----------------- ----------- 
    4           e                 101         
                                              
    ----------- ----------------- ----------- 
    5           n                 110         
                                              
    ----------- ----------------- ----------- 
    6           h                 104         
                                              
    ----------- ----------------- ----------- 
    7           a                 97          
                                              
    ----------- ----------------- ----------- 
    8           v                 118         
                                              
    ----------- ----------------- ----------- 
    9           n                 110         
                                              
    ----------- ----------------- ----------- 
    10          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    11          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    12          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    13          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    14          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    15          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    16          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    17          (null)            (null)      
                                              
    ----------- ----------------- ----------- 
    18          (null)            (null)

    10PATINDEX

    返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

    语法

    PATINDEX ( '%pattern%' , expression )

    参数

    pattern

    一个字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式。

    expression

    一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。

    返回类型

    int

    注释

    PATINDEX 对 text 数据类型很有用;除 IS NULL、IS NOT NULL 和 LIKE(这些是 WHERE 子句中对 text 类型有效的仅有的其它比较运算)外,PATINDEX 也可用于 WHERE 子句中。

    如果 pattern 或 expression 为 NULL,则当数据库的兼容级别为 70 时 PATINDEX 返回 NULL;如果数据库兼容级别为 65 或更靠前,则仅当 pattern 和 expression 同时为 NULL 时,PATINDEX 返回 NULL。

    示例
    A. 在 PATINDEX 中使用模式

    本示例查找模式"wonderful"在 titles 表中 notes 列的某一特定行中的开始位置。

    USE pubs
    GO
    SELECT PATINDEX('%wonderful%', notes)
    FROM titles
    WHERE title_id = 'TC3218'
    GO

    下面是结果集:

    ----------- 
    46          
     
    (1 row(s) affected)

    如果未通过 WHERE 子句限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值,对在其中未找到该模式的所有行报告零值。

    B. 在 PATINDEX 中使用通配符

    本示例使用通配符查找模式"won_erful"在 titles 表中 notes 列的某一特定行中的开始位置,其中下划线为代表任何字符的通配符。

    USE pubs
    GO
    SELECT PATINDEX('%won_erful%', notes)
    FROM titles
    WHERE title_id = 'TC3218'
    GO

    下面是结果集:

    ------------
    46
     
    (1 row(s) affected)

    如果没有限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值。

     

    11REPLACE

    用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。

    语法

    REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )

    参数

    'string_expression1'

    待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据。

    'string_expression2'

    待查找的字符串表达式。string_expression2 可以是字符数据或二进制数据。

    'string_expression3'

    替换用的字符串表达式。string_expression3 可以是字符数据或二进制数据。

    返回类型

    如果 string_expression(1、2 或 3)是支持的字符数据类型之一,则返回字符数据。如果 string_expression(1、2 或 3)是支持的 binary 数据类型之一,则返回二进制数据。

    示例

    下例用 xxx 替换 abcdefghi 中的字符串 cde。

    SELECT REPLACE('abcdefghicde','cde','xxx')
    GO

    下面是结果集:

    ------------
    abxxxfghixxx
    (1 row(s) affected)

    12QUOTENAME

    返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft® SQL Server™ 分隔标识符。

    语法

    QUOTENAME ( 'character_string' [ , 'quote_character' ] )

    参数

    '{character}[...n]'

    Unicode 字符数据字符串。character_string 是 sysname 值。

    'quote_character'

    用作分隔符的单字符字符串。可以是单引号 (')、左括号或右括号 ([]) 或者双引号 (")。如果未指定 quote_character,则使用括号。

    返回类型

    nvarchar(129)

    示例

    本示例采用字符串"abc[]def",并使用"["和"]"字符创建有效的 SQL Server 引用(分隔)标识符。

    SELECT QUOTENAME('abc[]def')

    下面是结果集:

    [abc[]]def]
     
    (1 row(s) affected)

    注意,字符串"abc[]def"中的右括号有两个,用于表示转义符。

     

    14REVERSE

    返回字符表达式的反转。

    语法

    REVERSE ( character_expression )

    参数

    character_expression

    由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

    返回类型

    varchar

    注释

    character_expression 必须为可隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。

    示例

    下例返回所有名字中的字符被反转的作者。

    USE pubs
    GO
    SELECT REVERSE(au_fname) 
    FROM authors
    ORDER BY au_fname
    GO

    下面是结果集:

    -------------------- 
    maharbA              
    okikA                
    treblA               
    nnA                  
    ennA                 
    truB                 
    enelrahC             
    lyrehC               
    naeD                 
    kriD                 
    rehtaeH              
    sennI                
    nosnhoJ              
    aiviL                
    eirojraM             
    rednaeM              
    leahciM              
    lehciM               
    ratsgninroM          
    dlanigeR             
    lyrehS               
    snraetS              
    aivlyS               
    (23 row(s) affected)

    15RIGHT

    返回字符串中从右边开始指定个数的 integer_expression 字符。

    语法

    RIGHT ( character_expression , integer_expression )

    参数

    character_expression

    由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

    integer_expression

    是起始位置,用正整数表示。如果 integer_expression 是负数,则返回一个错误。

    返回类型

    varchar

    character_expression 必须为可隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。

    注释

    兼容级别可能影响返回值。有关更多信息,请参见 sp_dbcmptlevel。

    16RTRIM

    截断所有尾随空格后返回一个字符串。

    语法

    RTRIM ( character_expression )

    参数

    character_expression

    由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

    返回类型

    varchar

    注释

    character_expression 必须为可隐性转换为 varchar 的数据类型。否则请使用 CAST 函数显式转换 character_expression。

    说明  兼容级别可能影响返回值。有关更多信息,请参见 sp_dbcmptlevel。

    示例

    下例显示如何使用 RTRIM 删除字符变量中的尾随空格。

    DECLARE @string_to_trim varchar(60)
    SET @string_to_trim = 'Four spaces are after the period in this sentence.    '
    SELECT 'Here is the string without the leading spaces: ' + CHAR(13) +
       RTRIM(@string_to_trim)
    GO

    下面是结果集:

    (1 row(s) affected)
    ------------------------------------------------------------------------ 
    Here is the string without the leading spaces: Four spaces are after the period in this sentence.           
    (1 row(s) affected)

    17SOUNDEX

    返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性。

    语法

    SOUNDEX ( character_expression )

    参数

    character_expression

    是字符数据的字母数字表达式。character_expression 可以是常数、变量或列。

    返回类型

    char

    注释

    SOUNDEX 将 alpha 字符串转换成由四个字符组成的代码,以查找相似的词或名称。代码的第一个字符是 character_expression 的第一个字符,代码的第二个字符到第四个字符是数字。将忽略 character_expression 中的元音,除非它们是字符串的第一个字母。可以嵌套字符串函数。

    示例

    下例显示 SOUNDEX 函数及相关的 DIFFERENCE 函数。在第一个示例中,返回所有辅音字母的标准 SOUNDEX 值。为 Smith 和 Smythe 返回的 SOUNDEX 结果相同,因为不包括所有元音、字母 y、连写字母和字母 h。

    -- Using SOUNDEX
    SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')

    下面是结果集:

    ----- ----- 
    S530 S530 
     
    (1 row(s) affected)

    DIFFERENCE 函数比较 SOUNDEX 模式结果的差。第一个示例显示两个仅元音不同的字符串。返回的差是 4(可能的最小差)。

    -- Using DIFFERENCE
    SELECT DIFFERENCE('Smithers', 'Smythers')
    GO

    下面是结果集:

    ----------- 
    4           
     
    (1 row(s) affected)

    在下例中,字符串的辅音不同,所以返回的差是 2(较高的差)。

    SELECT DIFFERENCE('Anothers', 'Brothers')
    GO

    下面是结果集:

    ----------- 
    2           
     
    (1 row(s) affected)

     

    18SPACE

    返回由重复的空格组成的字符串。

    语法

    SPACE ( integer_expression )

    参数

    integer_expression

    是表示空格个数的正整数。如果 integer_expression 为负,则返回空字符串。

    返回类型

    char

    注释

    若要在 Unicode 数据中包括空格,请使用 REPLICATE 而非 SPACE。

    示例

    下例剪裁作者的姓氏并串联一个逗号、两个空格和作者的名字。

    USE pubs
    GO
    SELECT RTRIM(au_lname) + ',' + SPACE(2) + LTRIM(au_fname)
    FROM authors
    ORDER BY au_lname, au_fname
    GO

    下面是结果集:

    Name                                                            
    --------------------------------------------------------------- 
    Bennet, Abraham                                                
    Blotchet-Halls, Reginald                                       
    Carson, Cheryl                                                 
    DeFrance, Michel                                               
    del Castillo, Innes                                            
    Dull, Ann                                                      
    Green, Marjorie                                                
    Greene, Morningstar                                            
    Gringlesby, Burt                                               
    Hunter, Sheryl                                                 
    Karsen, Livia                                                  
    Locksley, Charlene                                             
    MacFeather, Stearns                                            
    McBadden, Heather                                              
    O'Leary, Michael                                               
    Panteley, Sylvia                                               
    Ringer, Albert                                                 
    Ringer, Anne                                                   
    Smith, Meander                                                 
    Straight, Dean                                                 
    Stringer, Dirk                                                 
    White, Olivier                                                 
    Yokomoto,  Akiko                                                
     
    (23 row(s) affected)

    19STR

    由数字数据转换来的字符数据。

    语法

    STR ( float_expression [ , length [ , decimal ] ] )

    参数

    float_expression

    是带小数点的近似数字 (float) 数据类型的表达式。不要在 STR 函数中将函数或子查询用作 float_expression。

    length

    是总长度,包括小数点、符号、数字或空格。默认值为 10。

    decimal

    是小数点右边的位数。

    返回类型

    char

    注释

    如果为 STR 提供 length 和 decimal 参数值,则这些值应该是正数。在默认情况下或者小数参数为 0 时,数字四舍五入为整数。指定长度应该大于或等于小数点前面的数字加上数字符号(若有)的长度。短的 float_expression 在指定长度内右对齐,长的 float_expression 则截断为指定的小数位数。例如,STR(12,10) 输出的结果是 12,在结果集内右对齐。而 STR(1223, 2) 则将结果集截断为 **。可以嵌套字符串函数。

    说明  若要转换为 Unicode 数据,请在 CONVERT 或 CAST 转换函数内使用 STR。

    示例
    A. 使用 STR

    下例将包含五个数字和一个小数点的表达式转换为有六个位置的字符串。数字的小数部分四舍五入为一个小数位。

    SELECT STR(123.45, 6, 1)
    GO

    下面是结果集:

    ------
     123.5
     
    (1 row(s) affected)

    当表达式超出指定长度时,字符串为指定长度返回 **。

    SELECT STR(123.45, 2, 2)
    GO

    下面是结果集:

    --
    **
     
    (1 row(s) affected)

    即使数字数据嵌套在 STR内,结果集也是带指定格式的字符数据。

    SELECT STR (FLOOR (123.45), 8, 3)
    GO

    下面是结果集:

    --------
     123.000
     
    (1 row(s) affected)
    B. 使用 STR 和 CONVERT 函数

    下例比较 STR 和 CONVERT 的结果。

    SELECT STR(3.147) AS 'STR',
           STR(3.147, 5, 2) AS '2 decimals',
           STR(3.147, 5, 3) AS '3 decimals'
    GO

    下面是结果集:

    STR        2 decimals 3 decimals 
    ---------- ---------- ---------- 
             3 3.15      3.147      
     
    (1 row(s) affected)
     
    -- Use CONVERT.
    SELECT CONVERT(char(1), 3.147) AS 'CHAR(1)',
           CONVERT(char(3), 3.147) AS 'CHAR(3)',
           CONVERT(char(5), 3.147) AS 'CHAR(5)'
    GO

    下面是结果集:

    CHAR(1) CHAR(3) CHAR(5) 
    ------- ------- ------- 
    (null) (null) 3.147   
     
    (1 row(s) affected)

     

    20STUFF

    删除指定长度的字符并在指定的起始点插入另一组字符。

    语法

    STUFF ( character_expression , start , length , character_expression )

    参数

    character_expression

    由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

    start

    是一个整形值,指定删除和插入的开始位置。如果 start 或 length 是负数,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。

    length

    是一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。

    返回类型

    如果 character_expression 是一个支持的字符数据类型,则返回字符数据。如果 character_expression 是一个支持的 binary 数据类型,则返回二进制数据。

    注释

    可以嵌套字符串函数。

    示例

    下例通过在第一个字符串 (abcdef) 中删除从第二个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,创建并返回一个字符串。

    SELECT STUFF('abcdef', 2, 3, 'ijklmn')
    GO

    下面是结果集:

    --------- 
    aijklmnef 
     
    (1 row(s) affected)

    22SUBSTRING

    返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。

    语法

    SUBSTRING ( expression , start , length )

    参数

    expression

    是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。

    start

    是一个整数,指定子串的开始位置。

    length

    是一个整数,指定子串的长度(要返回的字符数或字节数)。

    说明  由于在 text 数据上使用 SUBSTRING 时 start 和 length 指定字节数,因此 DBCS 数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与 READTEXT 处理 DBCS 的方式一致。然而,由于偶而会出现奇怪的结果,建议对 DBCS 字符使用 ntext 而非 text。

    返回类型

    如果 expression 是支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型,则返回二进制数据。

    返回字符串的类型与给定表达式的类型相同(表中显示的除外)。

    给定的表达式

    返回类型

    text

    varchar

    image

    varbinary

    ntext

    nvarchar

     

    注释

    在字符数中必须指定使用 ntext、char 或 varchar 数据类型的偏移量(start 和 length)。在字节数中必须指定使用 text、image、binary 或 varbinary 数据类型的偏移量。

    说明  兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。

    示例
    A. 在字符串上使用 SUBSTRING

    下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。

    USE pubs
    SELECT au_lname, SUBSTRING(au_fname, 1, 1)
    FROM authors
    ORDER BY au_lname

    下面是结果集:

    au_lname                                   
    ---------------------------------------- - 
    Bennet                                   A 
    Blotchet-Halls                           R 
    Carson                                   C 
    DeFrance                                 M 
    del Castillo                             I 
    ...
    Yokomoto                                 A 
     
    (23 row(s) affected)

    下例显示如何显示字符串常量 abcdef 中的第二个、第三个和第四个字符。

    SELECT x = SUBSTRING('abcdef', 2, 3)

    下面是结果集:

    x
    ----------
    bcd
     
    (1 row(s) affected)
    B. 在 text、ntext 和 image 数据上使用 SUBSTRING

    下例显示如何从 pubs 数据库的 publishers 表内的每个 text 和 image 数据列中返回前 200 个字符。text 数据以 varchar 的形式返回,image 数据则以 varbinary 的形式返回。

    USE pubs
    SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo, 
       SUBSTRING(pr_info, 1, 10) AS pr_info
    FROM pub_info
    WHERE pub_id = '1756'

    下面是结果集:

    pub_id logo                   pr_info    
    ------ ---------------------- ---------- 
    1756   0x474946383961E3002500 This is sa
     
    (1 row(s) affected)

    下例显示 SUBSTRING 在 text 和 ntext 数据上的效果。首先,下例在 pubs 数据库内创建一个名为 npr_info 的新表。然后,在 npr_info 表中用 pub_info.pr_info 列的前 80 个字符创建 pr_info 列,并添加ü作为首字符。最后,INNER JOIN 检索所有出版商标识号以及 text 和 ntext 出版商信息列的 SUBSTRING。

    IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES 
          WHERE table_name = 'npub_info')
       DROP TABLE npub_info
    GO
    -- Create npub_info table in pubs database. Borrowed from instpubs.sql.
    USE pubs
    GO
    CREATE TABLE npub_info
    (
     pub_id         char(4)           NOT NULL
             REFERENCES publishers(pub_id)
             CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
     pr_info        ntext             NULL
    )
     
    GO
     
    -- Fill the pr_info column in npub_info with international data.
    RAISERROR('Now at the inserts to pub_info...',0,1)
     
    GO
     
    INSERT npub_info VALUES('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database')
    INSERT npub_info values('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
    INSERT npub_info values('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
    INSERT npub_info values('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
    INSERT npub_info values('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
    INSERT npub_info values('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
    INSERT npub_info values('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
    INSERT npub_info values('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data')
    GO
    -- Join between npub_info and pub_info on pub_id.
    SELECT pr.pub_id, SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
       SUBSTRING(npr.pr_info, 1, 35) AS npr_info
    FROM pub_info pr INNER JOIN npub_info npr
       ON pr.pub_id = npr.pub_id
    ORDER BY pr.pub_id ASC

     

    23UNICODE

    按照 Unicode 标准的定义,返回输入表达式的第一个字符的整数值。

    语法

    UNICODE ( 'ncharacter_expression' )

    参数

    'ncharacter_expression'

    是 nchar 或 nvarchar 表达式。

    返回类型

    int

    示例
    A. 使用 UNICODE 和 NCHAR

    下面的示例使用 UNICODE 和 NCHAR 函数打印 Åkergatan 24 字符串中第一个字符的 UNICODE 值,并打印实际的第一个字符 Å。

    DECLARE @nstring nchar(12)
    SET @nstring = N'Åkergatan 24'
    SELECT UNICODE(@nstring), NCHAR(UNICODE(@nstring))

    下面是结果集:

    ----------- - 
    197         Å
    B. 使用 SUBSTRING、UNICODE 和 CONVERT 函数

    下面的示例使用 SUBSTRING、UNICODE 和 CONVERT 函数输出字符串 Åkergatan 24 中每个字符的字符号、Unicode 字符和 UNICODE 值。

    -- The @position variable holds the position of the character currently
    -- being processed. The @nstring variable is the Unicode character 
    -- string to process.
    DECLARE @position int, @nstring nchar(12)
    -- Initialize the current position variable to the first character in 
    -- the string.
    SET @position = 1
    -- Initialize the character string variable to the string to process. 
    -- Notice that there is an N before the start of the string, which 
    -- indicates that the data following the N is Unicode data.
    SET @nstring = N'Åkergatan 24'
    -- Print the character number of the position of the string you are at, 
    -- the actual Unicode character you are processing, and the UNICODE 
    -- value for this particular character.
    PRINT 'Character #' + ' ' + 'Unicode Character' + ' ' + 'UNICODE Value'
    WHILE @position <= DATALENGTH(@nstring)
    -- While these are still characters in the character string,
       BEGIN
       SELECT @position, 
          CONVERT(char(17), SUBSTRING(@nstring, @position, 1)),
          UNICODE(SUBSTRING(@nstring, @position, 1))
       SELECT @position = @position + 1
       END

    下面是结果集:

    Character # Unicode Character UNICODE Value
                                              
    ----------- ----------------- ----------- 
    1           Å                 197         
                                              
    ----------- ----------------- ----------- 
    2           k                 107         
                                              
    ----------- ----------------- ----------- 
    3           e                 101         
                                              
    ----------- ----------------- ----------- 
    4           r                 114         
                                              
    ----------- ----------------- ----------- 
    5           g                 103         
                                              
    ----------- ----------------- ----------- 
    6           a                 97          
                                              
    ----------- ----------------- ----------- 
    7           t                 116         
                                              
    ----------- ----------------- ----------- 
    8           a                 97          
                                              
    ----------- ----------------- ----------- 
    9           n                 110         
                                              
    ----------- ----------------- ----------- 
    10                            32          
                                              
    ----------- ----------------- ----------- 
    11          2                 50          
                                              
    ----------- ----------------- ----------- 
    12          4                 52

     

    24UPPER

    返回将小写字符数据转换为大写的字符表达式。

    语法

    UPPER ( character_expression )

    参数

    character_expression

    由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。

    返回类型

    varchar

    注释

    character_expression 必须为可隐性转换为 varchar 的数据类型。否则请使用 CAST 函数显式转换 character_expression。

    示例

    本示例使用 UPPER 函数和 RTRIM 函数来返回整理过的大写的作者姓名。

    USE pubs
    GO
    SELECT UPPER(RTRIM(au_lname)) + ', ' + au_fname AS Name
    FROM authors
    ORDER BY au_lname
    GO

    下面是结果集:

    Name                                                           
    -------------------------------------------------------------- 
    BENNET, Abraham                                                
    BLOTCHET-HALLS, Reginald                                       
    CARSON, Cheryl                                                 
    DEFRANCE, Michel                                               
    DEL CASTILLO, Innes                                            
    DULL, Ann                                                      
    GREEN, Marjorie                                                
    GREENE, Morningstar                                            
    GRINGLESBY, Burt                                               
    HUNTER, Sheryl                                                 
    KARSEN, Livia                                                  
    LOCKSLEY, Charlene                                             
    MACFEATHER, Stearns                                            
    MCBADDEN, Heather                                              
    O'LEARY, Michael                                               
    PANTELEY, Sylvia                                               
    RINGER, Albert                                                 
    RINGER, Anne                                                   
    SMITH, Meander                                                 
    STRAIGHT, Dean                                                 
    STRINGER, Dirk                                                 
    WHITE, Johnson                                                 
    YOKOMOTO, Akiko                                                
     
    (23 row(s) affected)

     

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    (一)研究方法入门
    机器学习入门之认知
    夯实Java:从面向对象说起
    不同子系统采用不同MySQL编码LATIN1和UTF8的兼容
    性能优化 java 24 次阅读 · 读完需要 15 分钟 0
    如何用纯 CSS 创作一个充电 loader 特效
    如何用纯 CSS 创作一个 3D 文字跑马灯特效
    如何用纯 CSS 绘制一颗闪闪发光的璀璨钻石
    如何用 CSS 创作一个立体滑动 toggle 交互控件
    如何用纯 CSS 创作一个金属光泽 3D 按钮特效
  • 原文地址:https://www.cnblogs.com/Athrun/p/556586.html
Copyright © 2011-2022 走看看