以下是SQL Server字符串函数,用于处理输入字符串并返回字符串或数值:
| 函数 | 描述说明 |
| --- | --- |
| ASCII | 返回字符的ASCII代码值。 |
| CHAR | 将ASCII值转换为字符。 |
| CHARINDEX | 从指定位置开始搜索字符串内的子字符串,并返回子字符串的位置。 |
| CONCAT | 将两个或多个字符串连接成一个字符串。 |
| CONCAT\_WS | 使用分隔符将多个字符串连接成一个字符串。 |
| DIFFERENCE | 比较两个字符串的`SOUNDEX()`值。 |
| FORMAT | 返回使用指定格式和可选区域性格式化的值。 |
| LEFT | 从左侧开始从字符串中提取给定数量的字符。 |
| LEN| 返回字符串的多个字符。 |
| LOWER | 将字符串转换为小写。 |
| LTRIM | 删除所有前导空格后,从指定的字符串返回一个新字符串。 |
| NCHAR | 使用Unicode标准定义的指定整数代码返回Unicode字符。 |
| PATINDEX | 返回指定表达式中第一次出现模式的起始位置。 |
| QUOTENAME | 返回添加了分隔符的Unicode字符串,以使输入字符串成为有效的SQL Server分隔标识符。 |
| REPLACE | 用字符串替换所有出现的子字符串与另一个子字符串。 |
| REPLICATE | 返回重复指定次数的字符串。 |
| REVERSE | 返回字符串的相反顺序。 |
| RIGHT | 从右侧开始从字符串中提取给定数量的字符。 |
| RTRIM | 删除字符串所有尾随空白后,返回一个新字符串。 |
| SOUNDEX | 根据字符串的使用方式返回字符串的四个字符(`SOUNDEX`)代码 |
| SPACE | 返回一串重复的空格。 |
| STR | 返回从数字数据转换的字符数据。 |
| STRING\_AGG | 将具有指定分隔符的字符串行连接到新字符串中。 |
| STRING_ESCAPE | 转义文本中的特殊字符并返回带有转义字符的文本。 |
| STRING\_SPLIT | 一个表值函数,它根据指定的分隔符将字符串拆分为子字符串行。 |
| STUFF | 将字符串插入另一个字符串。 |
| SUBSTRING | 从具有指定长度的指定位置开始提取字符串中的子字符串。 |
| TRANSLATE | 在一次操作中替换多个单字符,一对一转换。 |
| TRIM| 删除所有前导和尾随空白后,从指定的字符串返回一个新字符串。 |
| UNICODE | 返回字符的Unicode标准定义的整数值。 |
| UPPER | 将字符串转换为大写。 |
ASCII 演示
```
select ASCII('Z') Z
```
#### SQL Server CHAR()函数简介
`CHAR()`函数将ASCII代码值转换为字符值。 以下简介`CHAR()`函数的语法:
~~~sql
CHAR ( int_exp )
~~~
在此语法中,`int_expr`是一个整数表达式,其值为`0`到`255`之间的整数。如果整数表达式的计算结果超出此范围,则`CHAR()`函数返回`NULL`。
`CHAR()`函数返回数据类型为`CHAR(1)`的字符。
> 请注意,要将字符转换为ASCII值,请使用[ASCII()](http://www.yiibai.com/sqlserver/sql-server-ascii-function.html "ASCII()")函数
#### SQL Server CHAR()函数示例
以下示例使用`CHAR()`函数来获取数字`65`和`90`的字符:
~~~sql
SELECT
CHAR(65) char_65,
CHAR(90) char_90;
~~~
##### SQL Server CHARINDEX()函数简介
SQL Server `CHARINDEX()`函数从指定位置开始搜索字符串内的子字符串。 它返回搜索到的字符串中找到的子字符串的位置,如果未找到子字符串,则返回零。 需要注意的是:它返回的起始位置是从`1`开始的,而不是从`0`开始的。
以下是`CHARINDEX()`函数的语法:
~~~sql
CHARINDEX(substring, string [, start_location])
~~~
在上面语法中,
* `substring` - 是要搜索的子字符串。它的长度限制为`8,000`个字符。
* `string` - 可以是文字字符串,表达式或列。这是一个要搜索的字符串。
* `start_location`是搜索开始的位置。 `start_location`是整数,大整数或计算结果为这些数据类型的值的表达式。
* `start_location`参数是可选的。 如果未指定,零或负值,则搜索从字符串的开头开始。
请注意,`CHARINDEX()`函数可以根据指定的排序规则执行区分大小写和不区分大小写的搜索。
#### SQL Server CHARINDEX()函数示例
下面来看一些使用`CHARINDEX()`函数的例子。
**1\. 使用CHARINDEX()执行单个搜索**
以下示例使用`CHARINDEX()`函数在字符中`"SQL Server CHARINDEX"`中执行字符串`"SQL`的简单搜索。
~~~sql
SELECT
CHARINDEX('SQL', 'SQL Server CHARINDEX') position;
~~~
执行上面查询语句,得到以下结果:
~~~shell
position
-----------
1
(1 row affected)
~~~
**2\. 使用CHARINDEX()函数执行不区分大小写的搜索**
下面语句中对字符串`"SQL Server CHARINDEX"`中执行不区分大小写的搜索字符串`"SERVER"`:
~~~sql
SELECT
CHARINDEX(
'SERVER',
'SQL Server CHARINDEX'
) position;
~~~
执行上面查询语句,得到以下结果:
~~~shell
position
-----------
5
(1 row affected)
~~~
**3\. 使用CHARINDEX()函数执行区分大小写的搜索**
以下示例显示如何在字符串:`"SQL Server CHARINDEX"`中区分大小写搜索字符串`"SERVE"`。
~~~sql
SELECT
CHARINDEX(
'SERVER',
'SQL Server CHARINDEX'
COLLATE Latin1_General_CS_AS
) position;
~~~
执行上面查询语句,得到以下结果:
~~~shell
position
-----------
0
(1 row affected)
~~~
**4\. 使用CHARINDEX()函数搜索不存在的子字符串**
以下示例说明了如何在字符串`'This is a haystack'`中搜索子字符串:`'needle'`。
~~~sql
SELECT
CHARINDEX('is','This is a my sister',5) start_at_fifth,
CHARINDEX('is','This is a my sister',10) start_at_tenth;
~~~
执行上面查询语句,得到以下结果:
~~~shell
start_at_fifth start_at_tenth
-------------- --------------
6 15
(1 row affected)
~~~
#### SQL Server CONCAT()函数简介
使用`CONCAT()`函数可将两个或多个字符串连接成一个字符串,语法如下:
~~~sql
CONCAT ( input_string1, input_string2 [, input_stringN ] );
~~~
`CONCAT()`接收最多`255`个输入字符串并将它们连接成一个字符串。 它至少需要两个输入字符串。 如果传递一个输入字符串,`CONCAT()`函数将会引发错误。
如果传递非字符串值,`CONCAT()`函数将在连接之前将这些值隐式转换为字符串。
`CONCAT()`函数还将`NULL`转换为类型为`VARCHAR(1)`的空字符串。
请注意,要在连接期间添加分隔符,请使用[CONCAT\_WS()](http://www.yiibai.com/sqlserver/sql-server-concat_ws-function.html "CONCAT_WS()")函数。
#### SQL Server CONCAT()函数示例
下面举一些例子来熟悉如何使用`CONCAT()`函数。
**1\. 将CONCAT()函数与文字字符串一起使用**
以下示例使用`CONCAT()`函数来连接三个文字字符串:`YiiBai`,`.`和`Com`:
~~~sql
SELECT
'YiiBai' + '.' + 'Com' AS doname;
~~~
执行上面查询语句,得到以下结果:
~~~shell
doname
---------
YiiBai.Com
(1 row affected)
~~~
**2\. 将CONCAT()函数与表列一起使用**
此示例使用[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")中的`sales.customers`表。
![客户表结构](https://www.yiibai.com/uploads/article/2019/03/01/100406_62418.png "客户表结构")
以下语句使用`CONCAT()`函数来连接`sales.customers`表的`first_name`和`last_name`列中的值:
~~~sql
SELECT
customer_id,
first_name,
last_name,
CONCAT(first_name, ' ', last_name) full_name
FROM
sales.customers
ORDER BY
full_name;
~~~
#### SQL Server CONCAT\_WS()函数简介
SQL Server `CONCAT_WS()`函数使用分隔符将两个或多个字符串连接成一个字符串。 `CONCAT_WS()`表示与分隔符连接。
以下是`CONCAT_WS()`函数的语法:
~~~sql
CONCAT_WS(separator,input_string1,input_string2,[...input_stringN]);
~~~
在上面这个语法中:
* `separator`是一个基于字符的表达式,其值为:`CHAR`,`NCHAR`,`VARCHAR`或`NVARCHAR`类型的任何字符。
* `input_string1`到`input_stringN`是任何类型的表达式。`CONCAT_WS()`函数在连接之前隐式地将非字符类型的值转换为字符类型。
`CONCAT_WS()`函数将输入字符串连接成一个字符串。 它将这些连接的字符串与第一个参数中指定的分隔符分开。
请注意,`CONCAT_WS()`至少需要两个输入字符串。 这意味着如果传递零或一个输入字符串参数,该函数将引发错误。
`CONCAT_WS()`函数将`NULL`视为`VARCHAR(1)`类型的空字符串。 它也不会在`NULL`之间添加分隔符。 因此,`CONCAT_WS()`函数可以干净地连接可能具有空值的字符串。
#### SQL Server CONCAT\_WS()函数示例
下面来看一些使用`CONCAT_WS()`函数的例子。
**1\. 使用CONCAT\_WS()将文字字符串与分隔符连接起来**
以下示例使用`CONCAT_WS()`函数将两个文字字符串连接成一个字符串。 它使用字符:`.`来分隔两个连接值:
~~~sql
SELECT
CONCAT_WS('.', 'YiiBai', 'Com') full_doname
~~~
执行上面查询语句,得到以下结果:
~~~shell
full_doname
-----------
YiiBai.Com
(1 行受影响)
~~~
**2\. 将CONCAT\_WS()与表列一起使用**
以下语句使用`CONCAT_WS()`函数连接`sales.customers`表的`last_name`和`first_name`列中的值。 它用逗号(`,`)和空格分隔`last_name`和`first_name`:
~~~sql
SELECT
first_name,
last_name,
CONCAT_WS(', ', last_name, first_name) full_name
FROM
sales.customers
ORDER BY
first_name,
last_name;
~~~
#### SQL Server LEFT()函数简介
`LEFT()`函数从提供的字符串的左侧提取给定数量的字符。 例如,`LEFT('SQL Server',3)`返回SQL。
`LEFT()`函数的语法如下:
~~~sql
LEFT ( input_string , number_of_characters )
~~~
在这个语法中:
* `input_string`可以是文字字符串,变量或列。`input_string`的结果的数据类型可以是除`TEXT`或`NTEXT`之外的任何数据类型,它隐式转换为`VARCHAR`或`NVARCHAR`类型。
* `number_of_characters`是一个正整数,指定将返回`input_string`的字符数。
当`input_string`是非`Unicode`字符数据类型时,`LEFT()`函数返回值为`VARCHAR`类型;如果`input_strin`g是`Unicode`字符数据类型,则返回`NVARCHAR`类型。
#### SQL Server LEFT()函数示例
下面举一些使用`LEFT()`函数的例子来更好地理解它。
**1\. LEFT()函数使用带有文字字符串**
以下语句使用`LEFT()`返回字符串SQL Server的最左边三个字符:
~~~sql
SELECT LEFT('SQL Server',3) result_string;
~~~
执行上面查询语句,得到以下结果:
~~~shell
result_string
-------------
SQL
(1 row affected)
~~~
**LEFT()函数与表列一起使用**
以下示例返回`production.products`表中每个产品名称的最左侧七个字符:
~~~sql
SELECT
product_name,
LEFT(product_name, 7) first_7_characters
FROM
production.products
ORDER BY
product_name;
~~~
#### SQL Server LEN()函数简介
`LEN()`函数返回输入字符串的字符数,不包括尾随空格。
以下是`LEN()`函数的语法:
~~~sql
LEN(input_string)
~~~
在此语法中,`input_string`可以是文字字符串,字符串表达式或字符或二进制数据的列。
如果`input_string`是`VARCHAR(max)`,`NVARCHAR(max)`或`VARBINARY(max)`数据类型,则`LEN()`函数返回数据类型为[BIGINT](http://www.yiibai.com/sqlserver/sql-server-int.html "BIGINT")的值; 否则返回为`INT`类型。
#### SQL Server LEN()函数示例
下面来看一些使用`LEN()`函数的例子。
**1\. LEN()函数与文字字符串一起使用**
下面的示例使用`LEN`函数返回字符串:`"SQL Server LEN"`的字符数和带有尾随空格的相同字符串。
~~~sql
SELECT
LEN('SQL Server LEN') length,
LEN('SQL Server LEN ') length_with_trailing_blanks;
~~~
执行上面查询语句,得到以下结果:
![查询结果](https://www.yiibai.com/uploads/article/2019/03/01/111018_17806.png "查询结果")
如上所见,`LEN()`函数跳过尾随空白。
**2\. 使用LEN()函数和列**
下面使用[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html# "示例数据库")中的`production.products`表进行演示。
![产品表结构](https://www.yiibai.com/uploads/article/2019/03/01/111313_38576.png "产品表结构")
以下语句使用`LEN()`函数返回产品名称及其长度,并按产品名称的长度对产品进行排序。
~~~sql
SELECT
product_name,
LEN(product_name) product_name_length
FROM
production.products
ORDER BY
LEN(product_name) DESC;
~~~
`LOWER()`函数将字符串转换为小写。 以下是`LOWER()`函数的语法:
~~~sql
LOWER(input_string)
~~~
在此语法中,`input_string`可以是文字字符串,变量,字符串表达式或表列。
`input_string`的类型必须可以隐式转换为`VARCHAR`类型。 否则,必须使用`CAST()`函数显式地转换`input_string`。
`LOWER()`函数返回`input_string`的小写。
#### SQL Server LOWER()函数示例
下面来看一些使用`LOWER()`函数的例子。
**1\. 使用LOWER()函数和文字字符串**
此示例使用`LOWER()`函数将字符串:`'YiiBai'`转换为`'yiibai'`:
~~~sql
SELECT
LOWER('YIIBAI') result, LOWER('YiiBai') result2;
~~~
执行上面查询语句,得到以下结果:
~~~shell
result result2
------------ ------------
yiibai yiibai
(1 行受影响)
~~~
**2\. 将LOWER()函数与表列一起使用**
在此示例中,将使用[示例数据库](http://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")中的`customers`表:
![客户表结构](https://www.yiibai.com/uploads/article/2019/03/01/112512_93883.png "客户表结构")
以下语句使用`LOWER()`函数在连接之前将客户的名字(`first_name`)和姓氏(`last_name`)转换为小写:
~~~sql
SELECT
first_name,
last_name,
CONCAT_WS(
' ',
LOWER(first_name),
LOWER(last_name)
) full_name_lowercase
FROM
sales.customers
ORDER BY
first_name,
last_name;
~~~
#### SQL Server RIGHT()函数简介
`RIGHT()`函数从指定字符串的右侧提取给定数量的字符。 例如,`RIGHT('SQL Server',6)`返回:`'Server'`。
**RIGHT()函数的语法如下:**
~~~sql
RIGHT ( input_string , number_of_characters )
~~~
在这个语法中:
* `input_string`可以是文字字符串,变量或列。 `input_string`的结果可以是任何数据类型,但是`TEXT`或`NTEXT`除外,它隐式转换为[VARCHAR](http://www.yiibai.com/sqlserver/sql-server-varchar.html "VARCHAR")或[NVARCHAR](http://www.yiibai.com/sqlserver/sql-server-nvarchar.html "NVARCHAR")。
* `number_of_characters`是一个正整数,指定将返回`input_string`右侧的字符数。
请注意,当`input_string`是非Unicode字符数据类型时,`RIGHT()`函数返回值的类型为:`VARCHAR`;如果`input_string`是Unicode字符数据类型,则返回值的类型为:`NVARCHAR`。
#### SQL Server RIGHT()函数示例
以下语句使用`RIGHT()`返回字符串:`"SQL Server"`的最右边`6`个字符:
~~~sql
SELECT LEFT('SQL Server',6) Result_string;
~~~
执行上面查询语句,得到以下结果:
~~~shell
Result_string
-------------
Server
(1 row affected)
~~~
以下示例从[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")返回`production.products`表中每个产品名称的最右边四个字符:
~~~sql
SELECT
product_name,
RIGHT(product_name, 4) last_4_characters
FROM
production.products
ORDER BY
product_name;
~~~
`UPPER()`函数将输入字符串转换为大写。 以下是`UPPER()`函数的语法:
~~~sql
UPPER(input_string)
~~~
在此语法中,`input_string`可以是文字字符串,变量,字符串表达式或表列。
`input_string`的类型必须可以隐式转换为`VARCHAR`。 否则,必须使用`CAST()`函数显式转换`input_string`。
`UPPER()`函数返回`input_string`的大写形式。
#### SQL Server UPPER()函数示例
下面来看一些使用`UPPER()`函数的例子。
**1\. 使用UPPER()函数和文字字符串**
此示例使用`UPPER()`函数将字符串`'sql'`转换为`'SQL'`:
~~~sql
SELECT
UPPER('sql') result;
~~~
执行上面查询语句,得到以下结果:
~~~shell
result
------
SQL
(1 row affected)
~~~
**2\. 将UPPER()函数与表列一起使用**
在此示例中,将使用示例数据库中的`production.products`表:
![Upper()函数](https://www.yiibai.com/uploads/article/2019/03/03/210313_59909.png "Upper()函数")
以下语句使用`UPPER()`函数将产品名称转换为大写:
~~~sql
SELECT
product_name,
UPPER(product_name) product_name_upper
FROM
production.products
ORDER BY
product_name;
~~~
- 第三章-数据库
- 3.1 SQL Server简介及安装
- 3.2 SQL Server示例数据库
- 3.3 SQL Server 加载示例
- 3.3 SQL Server 中的数据类型
- 3.4 SQL Server 数据定义语言DDL
- 3.5 SQL Server 修改数据
- 3.6 SQL Server 查询数据
- 3.7 SQL Server 连表
- 3.8 SQL Server 数据分组
- 3.9 SQL Server 子查询
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函数
- 3.10.3 SQL Server 日期函数
- 3.10.4 SQL Server 字符串函数