SQL sever中的函数(基础)

news2024/12/28 18:27:44

目录

一、聚合函数

1.1聚合函数概述

1.2SUM(求和)函数

1.3AVG(平均值)函数

1.4MIN(最小值)函数

1.5MAX(最大值)函数

1.6COUNT(统计)函数

1.6.1COUNT函数用法分类

1.6.2COUNT函数用法示例

1.7DISTINCT(取不重复记录)函数

1.8查询重复记录

二、数学函数

2.1数学函数概述

2.2ABS(绝对值)函数

2.3PI(圆周率)函数

2.4POWER(乘方)函数

2.5RAND(随机浮点数)函数

2.6ROUND(四舍五入)函数

2.7SQUARE(平方)函数和SQRT(平方根)函数

2.8三角函数

2.9CEILING(向上取整)函数

2.10FLOOR(向下取整)函数

2.11SQRT(平方根)函数

2.12EXP(指数)函数

2.13LOG(对数)函数

三、字符串函数

3.1字符串函数概述

3.2ASCⅡ(获取ASCⅡ码)函数

3.3CHARINDEX(返回字符串的起始位置)函数

3.4LEFT(取左边指定个数的字符)函数

3.5RIGHT(取右边指定个数的字符)函数

3.6LEN(返回字符个数)函数

3.7REPLACE(替换字符串)函数

3.8REVERSE(返回字符表达式的反转)函数

3.9STR函数

3.10SUBSTRING(取字符串)函数

四、日期和时间函数

4.1日期和时间函数概述

4.2GETDATE(返回当前系统日期和时间)函数

4.3DAY(返回指定日期的天)函数

4.4MONTH(返回指定日期的月)函数

4.5YEAR(返回指定日期的年)函数

4.6DATEDIFF(返回日期和时间的边界数)函数

4.7DATEADD(添加日期时间)函数

4.8DATENAME函数:

4.9DATEPART函数:

4.10CONVERT函数:

4.11FORMAT函数:

五、转换函数

5.1转换函数概述

5.2CAST函数

5.3CONVERT函数

六、元数据函数

6.1元数据函数概述

6.2COL_LENGTH函数

6.3COL_NAME函数

6.4DB_NAME函数


SQL Server 2008提供了各种函数,用于执行各种操作和计算。下面是对各种函数的总结使用。 

一、聚合函数

1.1聚合函数概述

聚合函数对一组值进行计算并返回单一的值,通常聚合函数会与SELECT语句的GROUP BY子句
一同使用
,在与GROUP BY子句使用时,聚合函数会为每一个组产生一个单一值,而不会为整个表产生一个单一值。通过将数据按照一个或多个列进行分组,可以对每个组应用聚合函数,并且为每个组返回一个结果。这样可以汇总数据并提供有关不同组的统计信息。

常用的聚合函数及说明如表所示:

函数名称说明
SUM返回表达式中所有值的和
AVG计算平均值
MIN返回表达式的最小值
MAX返回表达式的最大值
COUNT返回组中项目的数量
DISTINCT返回一个集合,并从指定集合中删除重复的元组

1.2SUM(求和)函数

SUM函数返回表达式中所有值的和或仅非重复值的和。SUM只能用于数字列,空值将被忽略。
语法格式如下:

SUM([ALL | DISTINCT ]expression)

参数说明:

  • ☑ALL:对所有的值应用此聚合函数。ALL是默认值。
  • ☑DISTINCT:指定SUM返回唯一值的和。
  • ☑expression:常量、列名、函数以及算术运算符、位运算符和字符串运算符的任意组合。expression是精确数字或近似数字数据类型类别(bt数据类型除外)的表达式。
  • ☑返回类型:以最精确的expression数据类型返回所有expression值的和。

有关SUM函数使用的几点说明如下:

  • ☑含有索引的字段能够加快聚合函数的运行。
  • ☑字段数据类型为int、smallint、tinyint、decimal、numeric、float、real、money以及smallmoney
  • 的字段才可以使用SUM函数。
  • ☑在使用SUM函数时,SQL Server把结果集中的smallint或tinyint这些数据类型当作int处理。
  • ☑在使用SUM函数时,SQL Server将忽略空值(NULL),即计算时不计算这些空值。

以下是SUM函数的基本语法:

SELECT SUM(column_name) AS sum_value
FROM table_name;

column_name是要计算总和的列名,table_name是包含该列的表名。使用AS关键字可以为结果指定别名(sum_value),以便更容易理解结果。 

例如,假设有一个名为SalesTable的表,包含以下数据:

SalesIDProductQuantity
1A10
2B15
3A20
4C5

使用SUM函数计算Quantity列的总和:

SELECT SUM(Quantity) AS TotalQuantity
FROM SalesTable;

 结果将是:

TotalQuantity
50

此外,SUM函数还可以与其他SQL查询语句结合使用。例如,可以使用WHERE子句进行条件过滤,然后计算满足条件的行的总和。例如,以下查询将计算Product为"A"的销售数量总和: 

SELECT SUM(Quantity) AS TotalQuantity
FROM SalesTable
WHERE Product = 'A';

 返回一个结果集,其中包含Product为"A"的销售数量总和。

1.3AVG(平均值)函数

AVG函数返回组中各值的平均值(将忽略空值)。语法格式如下:

AVG([ALL |DISTINCT ]expression)

参数说明:

  • ☑ALL:对所有的值进行聚合函数运算。ALL是默认值
  • ☑DISTINCT:指定AVG只在每个值的唯一实例上执行,·而不管该值出现了多少次。
  • ☑expression:是精确数值或近似数值数据类别(bit数据类型除外)的表达式。不允许使用聚合函数和子查询。
  • ☑返回类型:由expression的计算结果类型确定。

有关AVG函数使用的几点说明如下:

  • ☑AVG函数不一定返回与传递到函数的列完全相同的数据类型。
  • ☑AVG函数只能用于数据类型是int、smallint、tinyint、decimal、.float、real、money和smallmoney的字段。
  • ☑在使用AVG函数时,SQL Server把结果集中的smallint或tinyint这些数据类型当作int处理。

AVG函数的返回值类型由表达式的运算结果类型决定,如表所示。

表达式结果返回类型
整数分类int
decimal分类(p,s)decimal(38,s)除以decimal(10,0)
money和smallmoney分类money
float和read分类float

以下是AVG函数的基本语法:

SELECT AVG(column_name) AS average_value
FROM table_name;

 column_name是要计算平均值的列名,table_name是包含该列的表名。使用AS关键字可以为结果指定别名(average_value),以便更容易理解结果。

例如,假设有一个名为SalesTable的表,使用AVG函数计算Quantity列的平均值:

SELECT AVG(Quantity) AS AverageQuantity
FROM SalesTable;

结果将是:

AverageQuantity
12.5

 此外,AVG函数还可以与其他SQL查询语句结合使用。例如,可以使用WHERE子句进行条件过滤,然后计算满足条件的行的平均值。例如,以下查询将计算Product为"A"的销售数量平均值:

SELECT AVG(Quantity) AS AverageQuantity
FROM SalesTable
WHERE Product = 'A';

返回一个结果集,其中包含Product为"A"的销售数量平均值。 

1.4MIN(最小值)函数

MIN函数返回表达式中的最小值。语法格式如下:

MIN([ALL| DISTINCT] expression)

参数说明:

  • ☑ALL:对所有的值进行聚合函数运算。ALL是默认值。
  • ☑DISTINCT:指定每个唯一值都被考虑。DISTINCT对于MN无意义,使用它仅是为了符合ISO标准。
  • ☑expression:常量、列名、函数以及算术运算符、位运算符和字符串运算符的任意组合。MN可用于numeric、char、varchar或datetime列,但不能用于bit列。不允许使用聚合函数和子查询。
  • ☑返回类型:返回与expression相同的值。

有关MN函数使用的几点说明如下:

  • ☑MN函数不能用于数据类型是bit的字段。
  • ☑在确定列中的最小值时,MN函数忽略NULL值,但是如果在该列中的所有行都有NULL值,将返回NULL值。
  • ☑不允许使用聚合函数和子查询。

以下是MIN函数的基本语法:

SELECT MIN(column_name) AS min_value
FROM table_name;

 column_name是要查找最小值的列名,table_name是包含该列的表名。使用AS关键字可以为结果指定别名(min_value),以便更容易理解结果。

例如,假设有一个名为SalesTable的表,使用MIN函数找到Quantity列的最小值:

SELECT MIN(Quantity) AS MinQuantity
FROM SalesTable;

结果将是:

MinQuantity
5

 此外,MIN函数还可以与其他SQL查询语句结合使用。例如,可以使用WHERE子句进行条件过滤,然后找到满足条件的行的最小值。例如,以下查询将找到Product为"A"的销售数量的最小值:

SELECT MIN(Quantity) AS MinQuantity
FROM SalesTable
WHERE Product = 'A';

返回一个结果集,其中包含Product为"A"的销售数量的最小值。 

1.5MAX(最大值)函数

 MAX函数返回表达式中的最小值。语法格式如下:

MAX([ALL| DISTINCT] expression)

参数说明:

  • ☑ALL:对所有的值应用此聚合函数。ALL是默认值。
  • ☑DISTINCT:指定考虑每个唯一值。DISTINCT对于MAX无意义,使用它仅是为了与ISO实现兼容。
  • ☑expression:常量、列名、函数以及算术运算符、位运算符和字符串运算符的任意组合。MAX可用于numeric列、character列和datetime列,但不能用于bit列。不允许使用聚合函数和子查询。
  • ☑返回类型:返回与expression相同的值。

有关MAX函数使用的几点说明如下:

  • ☑MAX函数将忽略选取对象中的空值。
  • ☑不能通过MAX函数从bit、text和image数据类型的字段中选取最大值:
  • ☑在SQL Server中,MAX函数可以用于数据类型为数字、字符、datetime的列,但是不能用于数据类型为bit的列。不能使用聚合函数和子查询。
  • ☑对于字符列,MAX查找排序序列的最大值。

以下是MAX函数的基本语法:

SELECT MAX(column_name) AS max_value
FROM table_name;

 例如,假设有一个名为SalesTable的表,使用MAX函数找到Quantity列的最大值:

SELECT MAX(Quantity) AS MaxQuantity
FROM SalesTable;

结果将是:

MaxQuantity
20

 此外,MAX函数还可以与其他SQL查询语句结合使用。例如,可以使用WHERE子句进行条件过滤,然后找到满足条件的行的最大值。例如,以下查询将找到Product为"A"的销售数量的最大值:

SELECT MAX(Quantity) AS MaxQuantity
FROM SalesTable
WHERE Product = 'A';

返回一个结果集,其中包含Product为"A"的销售数量的最大值。 

1.6COUNT(统计)函数

COUNT函数返回组中的项数。COUNT返回int数据类型值。语法格式如下:

COUNT ({[[ALL | DISTINCT ]expression ]|*})

参数说明:

  • ☑ALL:对所有的值进行聚合函数运算。ALL是默认值。
  • ☑DISTINCT:指定COUNT返回唯一非空值的数量。
  • ☑expression:除text、image或ntext以外任何类型的表达式。不允许使用聚合函数和子查询。
  • ☑*:指定应该计算所有行以返回表中行的总数。COUNT(*)不需要任何参数,而且不能与DISTINCT一起使用。COUNT(*)不需要expression参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT(*)返回指定表中行数而不删除副本。它对各行分别计数,包括包含空值的行。
  • ☑返回类型:int类型。

以下是COUNT函数的基本语法:

SELECT COUNT(column_name) AS count_value
FROM table_name;

 例如,假设有一个名为SalesTable的表,使用COUNT函数统计SalesTable表中的行数:

SELECT COUNT(*) AS RowCount
FROM SalesTable;

结果将是:

RowCount
4

 此外,COUNT函数还可以与其他SQL查询语句结合使用。例如,可以使用WHERE子句进行条件过滤,然后统计满足条件的行数。例如,以下查询将统计Product为"A"的销售数量:

SELECT COUNT(*) AS CountA
FROM SalesTable
WHERE Product = 'A';

返回一个结果集,其中包含Product为"A"的销售数量。

1.6.1COUNT函数用法分类

①统计所有行数(无论列的值是否为NULL):

SELECT COUNT(*) AS TotalRows
FROM table_name;

这种用法会统计指定表中的所有行数,包括具有NULL值的行。 

②统计指定列非空值的行数:

SELECT COUNT(column_name) AS NonNullRows
FROM table_name;

这种用法只会统计指定列非空值的行数,忽略具有NULL值的行。 

③统计满足条件的行数:

SELECT COUNT(*) AS ConditionRows
FROM table_name
WHERE condition;

这种用法会统计满足WHERE子句中指定条件的行数。 

④统计不重复值列名的行数:

SELECT COUNT(DISTINCT column_name) AS count_value
FROM table_name;

这种用法会统计指定列中不重复的值的数量 。

1.6.2COUNT函数用法示例

下面通过一个实际的例子来说明这些用法之间的区别。假设有一个名为EmployeeTable的表,包含以下数据:

EmployeeIDNameDepartment
1JohnSales
2MaryHR
3NULLIT
4PeterSales

使用上述前三种用法来统计EmployeeTable中的行数,并分析它们之间的区别:

①统计所有行数(无论列的值是否为NULL):

SELECT COUNT(*) AS TotalRows
FROM EmployeeTable;

结果是:

②统计Name列非空值的行数: 

SELECT COUNT(Name) AS NonNullRows
FROM EmployeeTable;

结果是: 

③统计Department列为'Sales'的行数:

SELECT COUNT(*) AS ConditionRows
FROM EmployeeTable
WHERE Department = 'Sales';

结果是:

通过以上例子,可以看出不同的COUNT函数用法之间的区别:

  • 使用COUNT(*)时,会统计表中的所有行数,无论列的值是否为NULL。
  • 使用COUNT(column_name)时,只会统计指定列非空值的行数,忽略具有NULL值的行。
  • 使用COUNT(*)结合WHERE子句时,可以根据条件统计满足特定条件的行数。

④统计不重复值列名的行数:

例如,假设有一个名为SalesTable的表,使用COUNT(DISTINCT Product)函数统计SalesTable表中产品的不重复数量:

SELECT COUNT(DISTINCT Product) AS DistinctProducts
FROM SalesTable;

 结果是:

表示SalesTable表中的产品有3个不重复的值。

COUNT(DISTINCT 字段名)函数的区别在于它只统计指定列中的不重复值数量,而不是统计所有行或所有值的数量。它适用于需要计算某一列中独特值的情况,可以帮助用户快速了解数据集中存在的不同种类或分类的数量。 

1.7DISTINCT(取不重复记录)函数

DISTINCT函数对指定的集求值,删除该集中的重复元组,然后返回结果集。语法格式如下:

DISTINCT(Set_Expression)

参数说明:

  • Set_Expression:返回集的有效多维表达式(MDX)。

如果Distinct函数在指定的集中找到了重复的元组,则此函数只保留重复元组的第一个实例,同时保留该集原来的顺序。

以下是DISTINCT函数的基本语法:

SELECT DISTINCT column_name1, column_name2, ...
FROM table_name;

 使用DISTINCT关键字将会返回一组不重复的记录。

例如,假设有一个名为SalesTable的表,包含以下数据:

SalesIDProductQuantity
1A10
2B15
3A20
4C10
5A15

使用DISTINCT函数来选择不重复的Product值:

SELECT DISTINCT Product
FROM SalesTable;

 结果将是:

表示从SalesTable表中选择了不重复的Product值。

DISTINCT函数对于需要筛选出唯一值并且避免重复的情况非常有用。它可用于处理数据中存在重复记录的情况,并帮助用户获取唯一的、不重复的值。

注意:

DISTINCT函数将影响查询的性能,因为它需要对结果进行排序和比较以找到不重复的记录。 

1.8查询重复记录

在查询重复记录时,可以使用以下几种方法:

①使用GROUP BY和HAVING子句:

  • 使用GROUP BY按照指定的列分组,并使用HAVING筛选出出现次数大于1的组。
  • 这将返回包含重复记录的组。

语法格式:

SELECT column_name1, column_name2, ...
FROM table_name
GROUP BY column_name1, column_name2, ...
HAVING COUNT(*) > 1;

②使用子查询和EXISTS关键字:

  • 使用子查询构造一个包含重复记录的结果集,并使用EXISTS关键字来检查是否存在相同的记录。

语法格式:

SELECT column_name1, column_name2, ...
FROM table_name t1
WHERE EXISTS (
    SELECT 1 
    FROM table_name t2
    WHERE t1.column_name1 = t2.column_name1
      AND t1.column_name2 = t2.column_name2
      ...
    GROUP BY column_name1, column_name2, ...
    HAVING COUNT(*) > 1
);

③使用窗口函数ROW_NUMBER():

  • 使用ROW_NUMBER()函数给每个记录分配一个序号,并根据需要进行排序。
  • 然后,选择序号大于1的记录即可获取重复记录。

语法格式: 

SELECT column_name1, column_name2, ...
FROM (
    SELECT column_name1, column_name2, ...,
           ROW_NUMBER() OVER (PARTITION BY column_name1, column_name2, ... ORDER BY column_name1) AS row_num
    FROM table_name
) AS subquery
WHERE row_num > 1;

 示例说明:

创建表OrderTable,并插入数据:

--创建表
CREATE TABLE OrderTable (
    OrderID INT,
    CustomerID INT,
    Product VARCHAR(50),
    Quantity INT
);


--插入数据
INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (1, 1, 'A', 10);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (2, 2, 'B', 15);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (3, 3, 'A', 20);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (4, 4, 'C', 10);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (5, 1, 'A', 15);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (6, 2, 'B', 12);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (7, 3, 'A', 8);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (8, 4, 'D', 5);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (9, 5, 'E', 3);

INSERT INTO OrderTable (OrderID, CustomerID, Product, Quantity)
VALUES (10, 5, 'F', 7);

select * from OrderTable;

表展示:

使用之前提到的三种方法来查询重复记录 :

①使用GROUP BY和HAVING子句:

查询在OrderTable表中出现多次的CustomerID以及它们的重复次数。

SELECT CustomerID, COUNT(*) AS Count
FROM OrderTable
GROUP BY CustomerID
HAVING COUNT(*) > 1;

结果是:

②使用子查询和EXISTS关键字:

返回那些具有重复CustomerID的记录的CustomerID、Product和Quantity

SELECT CustomerID, Product, Quantity
FROM OrderTable t1
WHERE EXISTS (
    SELECT 1 
    FROM OrderTable t2
    WHERE t1.CustomerID = t2.CustomerID
    GROUP BY CustomerID
    HAVING COUNT(*) > 1
);

结果是:

③使用窗口函数ROW_NUMBER():

返回那些具有重复CustomerID和Product组合的记录的CustomerID、Product和Quantity。

SELECT CustomerID, Product, Quantity
FROM (
    SELECT CustomerID, Product, Quantity,
           ROW_NUMBER() OVER (PARTITION BY CustomerID, Product ORDER BY Quantity) AS row_num
    FROM OrderTable
) AS subquery
WHERE row_num > 1;

结果是:

二、数学函数

数学函数能够对数字表达式进行数学运算,并能够将结果返回给用户。默认情况下,传递给数学函数的数字将被解释为双精度浮点数。

2.1数学函数概述

数学函数可以对数据类型为整型(integer)、实型(real)、浮点型(float)、货币型(money)和
smallmoney的列进行操作。数学函数的返回值是6位小数,如果使用出错,则返回NULL值并显示提示信息,通常该函数可以用在SQL语句的表达式中。常用的数学函数及说明如表所示。

函数名称说明
ABS返回指定数字表达式的绝对值
COS返回指定的表达式中指定弧度的三角余弦值
COT返回指定的表达式中指定弧度的三角余切值
PI返回值为圆周率
POWER将指定的表达式乘指定次方
RAND返回0~1之间的随机f1oat数
ROUND将数字表达式四舍五入为指定的长度或精度
SIGN返回指定表达式的零(0)、正号(+1)或负号(-1)
SIN返回指定的表达式中指定弧度的三角正弦值
SQUARE返回指定表达式的平方
SQRT返回指定表达式的平方根
TAN返回指定的表达式中指定弧度的三角正切值

算术函数(如ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS和SIGN)返回与输入值具有相同数据类型的值。三角函数和其他函数(包括EXP、LOG、LOG10、SQUARE和SQRT)将输入值转换为float并返回float值。 

2.2ABS(绝对值)函数

ABS函数用于返回给定数字的绝对值。它接受一个数字作为参数,并返回该数字的非负值。

语法:

ABS(number)
  • number:要计算绝对值的数字。

 示例用法:

SELECT ABS(10) AS AbsoluteValue; -- 返回 10

SELECT ABS(-5) AS AbsoluteValue; -- 返回 5

SELECT ABS(3.14159) AS AbsoluteValue; -- 返回 3.14159

使用ABS函数计算了不同数字的绝对值。无论输入是正数、负数还是小数,ABS函数都会返回其绝对值。

注意,ABS函数也适用于表达式和列名。例如,可以在SELECT语句中使用ABS函数来计算列的绝对值。 

SELECT ABS(column_name) FROM table_name;

这样可以针对表中的指定列计算绝对值并返回相应的结果。 

2.3PI(圆周率)函数

SQL Server 2008 提供了名为 PI() 的内置函数来获取圆周率的值。PI() 函数不需要任何参数,并返回一个浮点数,表示圆周率 π 的近似值。

以下是使用 PI() 函数获取圆周率的示例:

SELECT PI() AS PiValue;

返回一个结果集,其中包含圆周率的近似值。例如,结果可能为 3.14159265358979。 

2.4POWER(乘方)函数

POWER 函数用于计算一个数的指定次幂。它接受两个参数:要进行乘方计算的数字和指定的幂数。

语法:

POWER(number, power)
  • number:要进行乘方计算的数字。
  • power:指定的幂数,即要将数字乘以自身的次数。

示例用法:

SELECT POWER(2, 3) AS Result; -- 返回 8,即 2 的 3 次幂

SELECT POWER(3.14, 2) AS Result; -- 返回 9.8596,即圆周率的平方

SELECT POWER(-2, 4) AS Result; -- 返回 16,即 -2 的 4 次幂

使用 POWER 函数对不同数字进行了乘方运算。第一个示例计算了 2 的 3 次幂,即 2 * 2 * 2,结果为 8。第二个示例计算了圆周率(3.14)的平方,结果为 9.8596。第三个示例计算了 -2 的 4 次幂,即 -2 * -2 * -2 * -2,结果为 16。

注意,POWER 函数也适用于表达式和列名。例如,可以在 SELECT 语句中使用 POWER 函数来计算某个列的乘方值。

SELECT POWER(column_name, power) FROM table_name;

可以针对表中的指定列进行乘方计算并返回相应的结果。 

2.5RAND(随机浮点数)函数

RAND() 函数用于生成一个随机浮点数。它不需要任何参数,并返回一个介于 0 和 1 之间的伪随机数。

语法:

RAND()

示例用法:

SELECT RAND() AS RandomNumber;

返回一个结果集,其中包含一个随机生成的浮点数。每次执行查询时,都会生成一个不同的随机数。

如果要生成一个指定范围内的随机数,可以使用一些数学运算来进行调整。例如,要生成一个介于 10 和 50 之间的随机整数,可以使用以下查询:

SELECT FLOOR(RAND() * 41 + 10) AS RandomIntegerInRange;

使用 FLOOR 函数将随机数乘以 41(范围的大小),然后加上 10(范围的起始值),最后将结果向下取整,得到一个介于 10 和 50 之间的随机整数。

注意:

由于 RAND() 函数是伪随机的,所以每次执行查询时都会生成一个新的随机数。如果需要在查询中多次使用相同的随机数,请将 RAND() 的结果保存到变量中,以便在查询中引用。

2.6ROUND(四舍五入)函数

ROUND 函数用于将一个数字四舍五入到指定的小数位数。它接受两个参数:要进行四舍五入的数字和指定的小数位数。

语法:

ROUND(number, decimals)
  • number:要进行四舍五入处理的数字。
  • decimals:指定的小数位数,即要保留的小数位数。

示例用法:

SELECT ROUND(3.14159, 2) AS RoundedValue; -- 返回 3.14

SELECT ROUND(6.789, 0) AS RoundedValue; -- 返回 7

SELECT ROUND(1234.56789, -2) AS RoundedValue; -- 返回 1200

使用 ROUND 函数对不同的数字进行了四舍五入操作。第一个示例将圆周率值 3.14159 四舍五入到小数点后两位,结果为 3.14。第二个示例将数字 6.789 四舍五入到整数,结果为 7。第三个示例将数字 1234.56789 四舍五入到百位,结果为 1200。

注意,ROUND 函数也适用于表达式和列名。例如,可以在 SELECT 语句中使用 ROUND 函数来对某个列的值进行四舍五入。

SELECT ROUND(column_name, decimals) FROM table_name;

可以对表中的指定列进行四舍五入,并返回相应的结果。 

ROUND 函数采用标准的四舍五入规则,即当给定数字的小数部分等于或大于 0.5 时,将向上取整;小于 0.5 时,将向下取整。

2.7SQUARE(平方)函数和SQRT(平方根)函数

①SQUARE 函数:

用于计算给定数值的平方。它接受一个参数,即要进行平方计算的数字。

语法:

SQUARE(number)

示例用法:

SELECT SQUARE(2) AS SquareValue; -- 返回 4

SELECT SQUARE(5.5) AS SquareValue; -- 返回 30.25

SELECT SQUARE(-3) AS SquareValue; -- 返回 9

使用 SQUARE 函数对不同数字进行了平方计算。第一个示例计算了数字 2 的平方,结果为 4。第二个示例计算了数字 5.5 的平方,结果为 30.25。第三个示例计算了数字 -3 的平方,结果为 9。

②SQRT 函数:

用于计算给定数值的平方根。它接受一个参数,即要进行平方根计算的数字。

语法:

SQRT(number)

示例用法:

SELECT SQRT(16) AS SquareRootValue; -- 返回 4

SELECT SQRT(2.25) AS SquareRootValue; -- 返回 1.5

SELECT SQRT(1000) AS SquareRootValue; -- 返回 31.6227766016838

使用 SQRT 函数对不同数字进行了平方根计算。第一个示例计算了数字 16 的平方根,结果为 4。第二个示例计算了数字 2.25 的平方根,结果为 1.5。第三个示例计算了数字 1000 的平方根,结果为 31.6227766016838。

注意,这些函数也适用于表达式和列名。例如,可以在 SELECT 语句中使用 SQUARE 和 SQRT 函数来对某个列的数值进行平方和平方根计算。

SELECT SQUARE(column_name) FROM table_name;

SELECT SQRT(column_name) FROM table_name;

可以对表中的指定列进行平方或平方根计算,并返回相应的结果。 

2.8三角函数

①SIN 函数:用于计算给定角度(以弧度为单位)的正弦值。

语法:

SIN(angle)

②COS 函数:用于计算给定角度(以弧度为单位)的余弦值。

语法:

COS(angle)

③TAN 函数:用于计算给定角度(以弧度为单位)的正切值。

语法:

TAN(angle)

④ASIN 函数:用于计算给定值的反正弦值,返回的结果是一个介于 -π/2 和 π/2 之间的角度(以弧度为单位)。

语法:

ASIN(value)

⑤ATAN 函数:用于计算给定值的反正切值,返回的结果是一个介于 -π/2 和 π/2 之间的角度(以弧度为单位)。

语法:

ACOS(value)

⑥ATAN 函数:用于计算给定值的反正切值,返回的结果是一个介于 -π/2 和 π/2 之间的角度(以弧度为单位)。

语法:

ATAN(value)

注意:

这些函数中的角度参数都需要以弧度为单位。如果想要使用角度作为输入,可以使用其他函数将角度转换为弧度值(如 RADIAN 函数)。 

示例用法:

SELECT SIN(0) AS SineValue; -- 返回 0,即 sin(0)

SELECT COS(PI()) AS CosineValue; -- 返回 -1,即 cos(π)

SELECT TAN(PI()/4) AS TangentValue; -- 返回 1,即 tan(π/4)

SELECT ASIN(0.5) AS ArcSineValue; -- 返回 0.523598775598299,即 asin(0.5)

SELECT ACOS(-0.5) AS ArcCosineValue; -- 返回 2.0943951023932,即 acos(-0.5)

SELECT ATAN(1) AS ArcTangentValue; -- 返回 0.785398163397448,即 atan(1)

以上示例展示了不同三角函数的用法和计算结果。在实际应用中,可以根据具体需求使用适当的三角函数来进行数值计算。 

2.9CEILING(向上取整)函数

CEILING 函数用于将一个数值向上取整为最接近且大于等于原始值的整数。它返回一个与原始值类型相同的整数或浮点数。

以下是 CEILING 函数的语法:

CEILING ( numeric_expression )
  • numeric_expression:要进行向上取整的数值表达式。

CEILING 函数将提供的数值表达式向上取整,并返回结果。

以下是一些示例,说明如何使用 CEILING 函数:

①向上取整为整数:

SELECT CEILING(3.7) AS Result;

运行以上代码,将获得如下结果: 

表示将数值表达式 3.7 向上取整为最接近且大于等于原始值的整数,结果为 4。 

②向上取整为浮点数: 

SELECT CEILING(3.14159 * 100) / 100.0; -- 返回 3.15,将 3.14159 向上取整到两位小数,即 3.15

运行以上代码,将获得如下结果: 

需要向上取整获得具有多个小数位的浮点数,可以根据需要使用 ROUND() 函数来控制小数位数。 

注意:

在某些情况下,向上取整可能会导致结果超过原始值,这是因为向上取整总是返回大于或等于原始值的最小整数或浮点数。 

2.10FLOOR(向下取整)函数

FLOOR 函数用于将一个数值向下取整为最接近且小于等于原始值的整数。它返回一个与原始值类型相同的整数或浮点数。

以下是 FLOOR 函数的语法:

FLOOR ( numeric_expression )
  • numeric_expression:要进行向下取整的数值表达式。

FLOOR 函数将提供的数值表达式向下取整,并返回结果。

以下示例,说明如何使用 FLOOR 函数: 

向下取整为整数:

SELECT FLOOR(3.7) AS Result;

运行以上代码,将获得如下结果: 

 

2.11SQRT(平方根)函数

SQRT 函数用于计算给定数值的平方根。它返回一个与原始值类型相同的浮点数。

以下是 SQRT 函数的语法:

SQRT ( numeric_expression )
  • numeric_expression:要计算平方根的数值表达式。

SQRT 函数将提供的数值表达式进行平方根运算,并返回结果作为浮点数。

以下是一些示例,说明如何使用 SQRT 函数:

①计算整数的平方根:

SELECT SQRT(16) AS Result;

运行以上代码,将获得如下结果:

 

②计算浮点数的平方根: 

SELECT SQRT(25.5) AS Result;

 运行以上代码,将获得如下结果:

注意:

SQRT 函数只能用于非负数,因为平方根仅适用于非负实数范围。如果尝试对负数应用 SQRT 函数,将会报错。 

2.12EXP(指数)函数

EXP 函数用于计算给定数值的指数(自然指数,以e为底)。它返回一个与原始值类型相同的浮点数。

以下是 EXP 函数的语法:

EXP ( numeric_expression )
  • numeric_expression:要计算指数的数值表达式。

EXP 函数将提供的数值表达式作为指数运算,并返回结果作为浮点数。

以下是一个示例,说明如何使用 EXP 函数:

SELECT EXP(2) AS Result;

 运行以上代码,将获得类似以下结果:

注意:

指数函数 EXP 使用的是自然常数 e (约等于2.71828)作为底数。因此,EXP(x) 的计算结果就是 e 的 x 次方。 

2.13LOG(对数)函数

LOG 函数用于计算给定数值的对数。它返回一个与原始值类型相同的浮点数。

以下是 LOG 函数的语法:

LOG ( float_expression [ , base ] )
  • float_expression:要计算对数的数值表达式。
  • base(可选):指定对数的底数,默认为自然对数(以e为底)。

LOG 函数将提供的数值表达式进行对数运算,并返回结果作为浮点数。

以下是一个示例,说明如何使用 LOG 函数:

计算自然对数(以e为底):

SELECT LOG(10) AS Result;

运行以上代码,将获得类似以下结果: 

 

在 SQL Server 2008 中,LOG 函数不支持直接指定底数。它只计算给定数值的自然对数(以e为底)。在 SQL Server 2012 及更高版本中,引入了 LOG 函数的第二个参数用于指定底数。但在 SQL Server 2008 中,此功能不可用。

 对于其他底数的对数计算,可以使用换底公式来实现,如下所示:

SELECT LOG(100) / LOG(10) AS Result;

结果为 :

 

三、字符串函数

字符串函数对N进制数据、字符串和表达式执行不同的运算,如返回字符串的起始位置,返回字
符串的个数等。

3.1字符串函数概述

字符串函数作用于char、varchar、binary和varbinary数据类型以及可以隐式转换为char或varchar
的数据类型,通常字符串函数可以用在SQL语句的表达式中。常用的字符串函数及说明如表所示。

函数名称说明
ASCII返回字符表达式最左端字符的ASCI代码值
CHARINDEX返回字符串中指定表达式的起始位置
LEFT从左边开始,取得字符串左边指定个数的字符
LEN返回指定字符串的字符(而不是字节)个数
REPLACE将指定的字符串替换为另一指定的字符串
REVERSE返回字符表达式的反转
RIGHT从右边开始,取得字符串右边指定个数的字符
STR返回由数字数据转换来的字符数据
SUBSTRING返回指定个数的字符

3.2ASCⅡ(获取ASCⅡ码)函数

使用ASCII函数来获取字符的ASCII码。ASCII函数接受一个参数,该参数可以是任何字符、表达式或列名,并返回对应字符的ASCII码值。

以下是使用ASCII函数获取ASCⅡ码的示例:

SELECT ASCII('A') AS ASC_Code;

返回字符'A'的ASCII码值,即65。

ASCI码共有127个,其中Microsoft Windows不支持1~7、11~12和14~31之间的字符。值8、9、10和13分别转换为退格、制表、换行和回车字符,它们并没有特定的图形显示,但会依不同的应用程序而对文本显示有不同的影响。 

ASCII函数在较新版本的SQL Server中仍然有效,但已从SQL Server 2017开始被推荐使用UNICODE函数来代替。

 ASCII值对照表如下所示:

比如使用ASCI函数返回NXT的ASCI代码值。SQL语句及运行结果 如下:

--使用ASCII函数分别对每个字符进行处理:
SELECT ASCII('N') AS ASC_Code_N,
       ASCII('X') AS ASC_Code_X,
       ASCII('T') AS ASC_Code_T;


--动态SQL:
DECLARE @str NVARCHAR(50) = 'NXT';
DECLARE @sql NVARCHAR(MAX) = '';
DECLARE @char NVARCHAR(1);
DECLARE @i INT = 1;

WHILE @i <= LEN(@str)
BEGIN
    SET @char = SUBSTRING(@str, @i, 1);
    SET @sql = @sql + 'SELECT ASCII(''' + @char + ''') AS ASC_Code' + @char + '; ';
    SET @i = @i + 1;
END

EXEC(@sql);

--或
DECLARE @position int,@string char (3)
SET @position = 1
SET @string = 'NXT'
WHILE @position<=DATALENGTH(@string)
   BEGIN
   SELECT ASCII(SUBSTRING (@string,@position,1))AS ASCII值,
     CHAR (ASCII (SUBSTRING(@string,@position,1)))AS 字符
SET @position =@position +1
END

运行以上代码,将获得如下结果:

表示字符'N'的ASCII码值为78,字符'X'的ASCII码值为88,字符'T'的ASCII码值为84。 

3.3CHARINDEX(返回字符串的起始位置)函数

使用CHARINDEX函数来查找一个字符串在另一个字符串中的起始位置。该函数接受三个参数:要查找的字符串、被搜索的字符串以及起始搜索位置(可选,默认为1)。

以下是CHARINDEX函数的语法:

CHARINDEX(search_string, expression [, start_location])
  • search_string:要查找的字符串。
  • expression:被搜索的字符串。
  • start_location(可选):指定从哪个位置开始搜索,默认为1。

 CHARINDEX函数返回要查找的字符串在被搜索字符串中的第一个匹配位置。如果找到了匹配项,则返回一个大于等于1的整数值。如果没有找到匹配项,则返回0。

下面是一个示例,说明如何使用CHARINDEX函数:

例1:查找字符串中的子字符串

DECLARE @string VARCHAR(50) = 'Hello, World!';
DECLARE @searchString VARCHAR(10) = 'World';

SELECT CHARINDEX(@searchString, @string) AS Start_Position;

运行以上代码,将获得如下结果: 

表示字符串'World'在被搜索的字符串'Hello, World!'中的起始位置是第8个字符。

例2:查找多个匹配项的起始位置

如果我们想要查找字符串中多个匹配项的起始位置,可以使用循环结合 CHARINDEX 函数。 

DECLARE @string VARCHAR(50) = 'Hello, Hello, Hello';
DECLARE @searchString VARCHAR(10) = 'Hello';
DECLARE @startPos INT = 1;

WHILE @startPos > 0
BEGIN
    SET @startPos = CHARINDEX(@searchString, @string, @startPos);
    
    IF @startPos > 0
    BEGIN
        PRINT 'Found at position: ' + CAST(@startPos AS VARCHAR);
        SET @startPos = @startPos + 1;
    END
END

输出:

  

3.4LEFT(取左边指定个数的字符)函数

使用 LEFT 函数来截取一个字符串的左边指定个数的字符。该函数接受两个参数:要截取的字符串和要截取的字符数。

以下是 LEFT 函数的语法:

LEFT (expression, length)
  • expression:要截取的字符串。
  • length:要截取的字符数。

LEFT 函数返回被截取字符串的左边指定个数的字符。

下面是一个示例,说明如何使用 LEFT 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';
DECLARE @characters INT = 5;

SELECT LEFT(@string, @characters) AS Left_Side;

运行以上代码,将获得如下结果: 

表示从字符串 'Hello, World!' 的左边截取了前 5 个字符。 

3.5RIGHT(取右边指定个数的字符)函数

使用 RIGHT 函数来截取一个字符串的右边指定个数的字符。该函数接受两个参数:要截取的字符串和要截取的字符数。

以下是 RIGHT 函数的语法:

RIGHT (expression, length)
  • expression:要截取的字符串。
  • length:要截取的字符数。

RIGHT 函数返回被截取字符串的右边指定个数的字符。

下面是一个示例,说明如何使用 RIGHT 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';
DECLARE @characters INT = 6;

SELECT RIGHT(@string, @characters) AS Right_Side;

运行以上代码,将获得如下结果:

 

表示从字符串 'Hello, World!' 的右边截取了后 6 个字符。 

3.6LEN(返回字符个数)函数

使用 LEN 函数来获取一个字符串的字符个数。该函数接受一个参数:要计算长度的字符串。

以下是 LEN 函数的语法:

LEN (expression)
  • expression:要计算长度的字符串。

LEN 函数返回给定字符串中的字符个数。

下面是一个示例,说明如何使用 LEN 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';

SELECT LEN(@string) AS String_Length;

 运行以上代码,将获得如下结果:

表示获取了字符串 'Hello, World!' 的字符个数,即 13 个字符。 

3.7REPLACE(替换字符串)函数

使用 REPLACE 函数来替换一个字符串中的指定子字符串。该函数接受三个参数:原始字符串、要替换的子字符串以及替换后的新字符串。

以下是 REPLACE 函数的语法:

REPLACE (string_expression, search_string, replacement_string)
  • string_expression:原始字符串。
  • search_string:要替换的子字符串。
  • replacement_string:替换后的新字符串。

REPLACE 函数会在原始字符串中搜索出现的所有 search_string,并将其替换为 replacement_string

下面是一个示例,说明如何使用 REPLACE 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';
DECLARE @searchString VARCHAR(10) = 'World';
DECLARE @replaceString VARCHAR(10) = 'Universe';

SELECT REPLACE(@string, @searchString, @replaceString) AS Modified_String;

 运行以上代码,将获得如下结果:

表示将字符串 'Hello, World!' 中的子字符串 'World' 替换为 'Universe',得到了修改后的字符串 'Hello, Universe!'。 

3.8REVERSE(返回字符表达式的反转)函数

使用 REVERSE 函数来反转一个字符串的顺序。该函数接受一个参数:要反转的字符表达式。

以下是 REVERSE 函数的语法:

REVERSE (string_expression)
  • string_expression:要反转的字符串或列。

REVERSE 函数会按相反的顺序返回给定字符表达式的内容。

下面是一个示例,说明如何使用 REVERSE 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';

SELECT REVERSE(@string) AS Reversed_String;

运行以上代码,将获得如下结果: 

表示对字符串 'Hello, World!' 进行了反转,得到了 '!dlroW ,olleH'。 

3.9STR函数

STR 函数用于将数字或浮点数转换为字符串形式。该函数接受两个或三个参数:要转换的数值、可选的指定总位数和小数位数。

以下是 STR 函数的语法:

STR (float_expression, [total_length], [decimal_places])
  • float_expression:要转换为字符串的数字或浮点数。
  • total_length:(可选)生成的字符串的总长度。如果省略,则根据输入的数值自动确定合适的长度。
  • decimal_places:(可选)生成的字符串中保留的小数位数。如果省略,则默认保留所有小数位数。

STR 函数将数值转换为字符串,并使用必要的填充和格式化选项来生成结果。

下面是一个示例,说明如何使用 STR 函数:

DECLARE @number FLOAT = 1234.567;

SELECT STR(@number, 10, 2) AS Converted_String;

运行以上代码,将获得如下结果: 

 

表示将浮点数 1234.567 转换为字符串,并指定总长度为 10 个字符,小数位数为 2。 

3.10SUBSTRING(取字符串)函数

使用 SUBSTRING 函数从一个字符串中提取指定的子字符串。该函数接受三个参数:原始字符串、要提取的子字符串的起始位置和要提取的字符数。

以下是 SUBSTRING 函数的语法:

SUBSTRING (string_expression, start, length)
  • string_expression:原始字符串。
  • start:要提取的子字符串的起始位置。
  • length:要提取的字符数。

SUBSTRING 函数返回从原始字符串中从指定起始位置开始的指定字符数的子字符串。

下面是一个示例,说明如何使用 SUBSTRING 函数:

DECLARE @string VARCHAR(50) = 'Hello, World!';
DECLARE @startPos INT = 8;
DECLARE @length INT = 5;

SELECT SUBSTRING(@string, @startPos, @length) AS Substring;

运行以上代码,将获得如下结果: 

 

表示从字符串 'Hello, World!' 的第 8 个字符位置开始提取了 5 个字符,得到了子字符串 'World'。 

四、日期和时间函数

日期和时间函数主要用来显示有关日期和时间的信息。在日期和时间函数中,DAY函数、MONTH
函数、YEAR函数用来获取时间和日期部分的函数。DATEDIF℉函数用来获取日期和时间差的函数,DATEADD函数用来修改日期和时间值的函数。

4.1日期和时间函数概述

日期和时间函数主要用来操作datetime、smalldatetime类型的数据,日期和时间函数执行算术运行
与其他函数一样,也可以在SQL语句的SELECT、WHERE子句以及表达式中使用。常用的日期时间函数及说明如表所示。

函数名称说明
DATEADD在向指定日期加上一段时间的基础上,返回新的datetime值
DATEDIFF返回跨两个指定日期的日期和时间边界数
GETDATE返回当前系统日期和时间
DAY返回指定日期中的天的整数
MONTH返回指定日期中的月份的整数
YEAR返回指定日期中的年份的整数

4.2GETDATE(返回当前系统日期和时间)函数

使用 GETDATE 函数来获取当前系统的日期和时间。该函数不接受任何参数。

以下是 GETDATE 函数的语法:

GETDATE()

GETDATE 函数返回一个包含当前系统日期和时间的 datetime 类型值。

下面是一个示例,说明如何使用 GETDATE 函数:

SELECT GETDATE() AS Current_DateTime;

 运行以上代码,将获得类似以下结果:

表示获取了当前系统的日期和时间。每次调用 GETDATE 函数都会返回当前系统的最新日期和时间,因此结果可能会因为执行时间而不同。 

4.3DAY(返回指定日期的天)函数

使用 DAY 函数来获取指定日期的天数部分。该函数接受一个参数:要提取天数的日期。

以下是 DAY 函数的语法:

DAY (date)
  • date:要提取天数的日期。

DAY 函数返回给定日期的天数部分。

下面是一个示例,说明如何使用 DAY 函数:

DECLARE @date DATE = '2022-10-17';

SELECT DAY(@date) AS Day_Number;

 运行以上代码,将获得如下结果:

表示从日期 '2022-10-17' 中提取了天数部分,即 17 号。 

4.4MONTH(返回指定日期的月)函数

使用 MONTH 函数来获取指定日期的月份部分。该函数接受一个参数:要提取月份的日期。

以下是 MONTH 函数的语法:

MONTH (date)
  • date:要提取月份的日期。

MONTH 函数返回给定日期的月份部分,范围从 1 到 12。

下面是一个示例,说明如何使用 MONTH 函数:

DECLARE @date DATE = '2022-10-17';

SELECT MONTH(@date) AS Month_Number;

 运行以上代码,将获得如下结果:

表示从日期 '2022-10-17' 中提取了月份部分,即 10 月。 

4.5YEAR(返回指定日期的年)函数

使用 YEAR 函数来获取指定日期的年份部分。该函数接受一个参数:要提取年份的日期。

以下是 YEAR 函数的语法:

YEAR (date)
  • date:要提取年份的日期。

YEAR 函数返回给定日期的年份部分。

下面是一个示例,说明如何使用 YEAR 函数:

DECLARE @date DATE = '2022-10-17';

SELECT YEAR(@date) AS Year_Number;

 运行以上代码,将获得如下结果:

表示从日期 '2022-10-17' 中提取了年份部分,即 2022 年。 

4.6DATEDIFF(返回日期和时间的边界数)函数

使用 DATEDIFF 函数来计算两个日期或时间之间的差距。该函数接受三个参数:时间间隔单位、开始日期或时间以及结束日期或时间。

以下是 DATEDIFF 函数的语法:

DATEDIFF (datepart, startdate, enddate)
  • datepart:时间间隔单位,可以是年份(year)、季度(quarter)、月份(month)、周数(week)、天数(day)、小时数(hour)、分钟数(minute)或秒数(second)。
  • startdate:开始日期或时间。
  • enddate:结束日期或时间。

DATEDIFF 函数根据给定的时间间隔单位计算并返回开始日期或时间和结束日期或时间之间的边界数。

下面是一个示例,说明如何使用 DATEDIFF 函数:

DECLARE @startdate DATE = '2022-01-01';
DECLARE @enddate DATE = '2022-12-31';

SELECT DATEDIFF(MONTH, @startdate, @enddate) AS Month_Difference;

 运行以上代码,将获得如下结果:

表示计算了从日期 '2022-01-01' 到日期 '2022-12-31' 之间的月份差异,得到了 11 个月。

同样如下找天数差异: 

DECLARE @startdate DATE = '2022-01-01';
DECLARE @enddate DATE = '2022-12-31';

SELECT DATEDIFF(DAY, @startdate, @enddate) AS Month_Difference;

 运行以上代码,将获得如下结果:

表示计算了从日期 '2022-01-01' 到日期 '2022-12-31' 之间的天数差异,得到了 364天。 

4.7DATEADD(添加日期时间)函数

使用 DATEADD 函数来添加指定的时间间隔到给定的日期或时间。该函数接受三个参数:时间间隔单位、要添加的数值以及开始日期或时间。

以下是 DATEADD 函数的语法:

DATEADD (datepart, number, date)
  • datepart:时间间隔单位,可以是年份(year)、季度(quarter)、月份(month)、周数(week)、天数(day)、小时数(hour)、分钟数(minute)或秒数(second)。
  • number:要添加的数值,表示要添加的时间间隔数量。
  • date:开始日期或时间。

DATEADD 函数根据给定的时间间隔单位和数值将其添加到开始日期或时间,并返回计算后的日期或时间。

下面是一个示例,说明如何使用 DATEADD 函数:

DECLARE @startdate DATE = '2022-01-01';
DECLARE @monthsToAdd INT = 3;

SELECT DATEADD(MONTH, @monthsToAdd, @startdate) AS NewDate;

 运行以上代码,将获得如下结果:

表示将开始日期 '2022-01-01' 添加了 3 个月,得到了新的日期 '2022-04-01'

4.8DATENAME函数:

DATENAME 函数用于返回指定日期部分的名称。该函数接受两个参数:日期部分和日期。

以下是 DATENAME 函数的语法:

DATENAME (datepart, date)
  • datepart:要返回名称的日期部分,如年份(year)、月份(month)、天数(day)等。
  • date:要从中提取日期部分的日期。

DATENAME 函数返回给定日期的指定日期部分的名称。

下面是一个示例,说明如何使用 DATENAME 函数:

DECLARE @date DATETIME = '2022-10-17';

SELECT DATENAME(YEAR, @date) AS Year_Name,
       DATENAME(MONTH, @date) AS Month_Name,
       DATENAME(DAY, @date) AS Day_Name;

 运行以上代码,将获得类似以下结果:

表示从日期 '2022-10-17' 中提取了年份、月份和星期几的名称。 

4.9DATEPART函数:

DATEPART 函数用于提取指定日期部分的整数值。它可以从日期和时间类型的表达式中获取年份、月份、日等特定的日期部分。

以下是 DATEPART 函数的语法:

DATEPART(datepart, date)
  • datepart:要提取的日期部分,如年份(year)、月份(month)、天数(day)等。
  • date:要从中提取日期部分的日期或时间表达式。

DATEPART 函数返回指定日期部分的整数值。

以下是一些示例,说明如何使用 DATEPART 函数:

①提取年份:

SELECT DATEPART(YEAR, '2022-10-17') AS YearPart;

运行以上代码,将获得如下结果:

表示从日期 '2022-10-17' 中提取了年份的整数值。 

②提取月份:

SELECT DATEPART(MONTH, GETDATE()) AS MonthPart;

运行以上代码,将获得如下结果: 

表示从当前日期中提取了月份的整数值。 

4.10CONVERT函数:

CONVERT 函数用于将一个表达式转换为指定的数据类型。它通常用于日期、时间和字符串之间的转换,以及不同数据类型之间的转换。

以下是 CONVERT 函数的语法:

CONVERT (data_type, expression [, style])
  • data_type:要将表达式转换为的目标数据类型。
  • expression:要进行转换的表达式或列名。
  • style(可选):用于指定日期和时间格式的样式代码。

CONVERT 函数根据指定的数据类型将表达式转换为相应的数据类型,并返回转换后的值。

下面是一些示例,说明如何使用 CONVERT 函数:

①将字符串转换为日期类型:

DECLARE @dateString VARCHAR(10) = '2022-10-17';
SELECT CONVERT(DATE, @dateString) AS ConvertedDate;

运行以上代码,将获得如下结果:

 

这表示将字符串 '2022-10-17' 转换为日期类型。

②将日期转换为字符串类型: 

DECLARE @date DATE = GETDATE();
SELECT CONVERT(VARCHAR(10), @date, 101) AS ConvertedString;

运行以上代码,将获得如下结果: 

表示将当前日期转换为字符串类型,并使用样式代码 101 格式化'MM/DD/YYYY' 的形式。

下表为日期样式代码表:

③使用字符串操作函数自定义日期和时间格式 

DECLARE @date DATETIME = GETDATE();
SELECT RIGHT(CONVERT(VARCHAR(20), @date, 100), 7) AS FormattedDateTime;

运行以上代码,将获得类似以下结果 :

表示将当前日期时间转换为字符串类型,并使用右侧函数 RIGHT 和子字符串提取来获取时间部分。 

注意:

CONVERT 函数需要进行明确的类型转换,并且在某些情况下可能会导致数据截断或不准确的结果。如果需要更复杂的类型转换操作,还可以考虑使用 CAST 函数来实现更灵活的转换。

4.11FORMAT函数:

FORMAT 函数用于将日期、时间和数字数据格式化为特定的字符串表示形式。它提供了更灵活和直观的方式来格式化数据,使其与特定的地区设置和语言习惯相匹配。

以下是 FORMAT 函数的语法:

FORMAT (value, format [, culture])
  • value:要进行格式化的值,可以是日期、时间或数字。
  • format:指定要应用的格式模式的字符串。这可以是内置的格式模式,也可以是自定义的格式模式。
  • culture(可选):指定要应用的文化区域设置。如果未指定,则使用当前会话的文化区域设置。

FORMAT 函数根据指定的格式模式和文化区域设置将值格式化为字符串,并返回格式化后的结果。

以下是一些示例,说明如何使用 FORMAT 函数:

①格式化日期:

SELECT FORMAT(GETDATE(), 'MM/dd/yyyy') AS FormattedDate;

运行以上代码,将获得如下结果: 

FormattedDate

-------------

10/17/2022

表示使用格式模式 'MM/dd/yyyy' 将当前日期格式化为字符串。

②格式化数字:

SELECT FORMAT(1234567.89, 'N2') AS FormattedNumber;

运行以上代码,将获得如下结果:

FormattedNumber

---------------

1,234,567.89 

表示使用格式模式 'N2' 将数字格式化为带有千位分隔符和两位小数的字符串。

注意:

FORMAT 函数是在 SQL Server 2012 版本中引入的,因此在较旧的版本中可能不可用。

比如2008版本就无法识别该函数:

五、转换函数

如果SQL Server没有自动执行数据类型的转换,可以使用CAST和CONVERT转换函数将一种数据类型的表达式转换为另一种数据类型的表达式。例如,如果比较char和datetim㎡e表达式、smallint和int表达式或不同长度的char表达式,则SQL Server自动对这些表达式进行转换。

5.1转换函数概述

当遇到类型转换的问题时,可以使用SQL Server所提供的CAST和CONVERT函数。这两种函数不但可以将指定的数据类型转换为另一种数据类型,还可用来获得各种特殊的数据格式。CAST和
CONVERT函数都可用于选择列表、WHERE子句和允许使用表达式的任何地方。

在SQL Server中数据类型转换分为两种,分别如下。

  • ☑隐性转换:SQL Server自动处理某些数据类型的转换。例如,如果比较char和datetime表达式、smallint和int表达式,或不同长度的char表达式,SQL Server可将它们自动转换,这种转换称为隐性转换,对这些转换不必使用CAST函数。
  • ☑显式转换:显式转换是指CAST和CONVERT函数将数值从一种数据类型(局部变量、列或其他表达式)转换到另一种数据类型。

隐性转换对用户是不可见的,SQL Server自动将数据从一种数据类型转换成另一种数据类型。例如,如果一个smallint变量和一个int变量相比较,这个smallint变量在比较前即被隐性转换成int变量。

有关转换函数使用的几点说明如下:

  • ☑CAST函数基于SQL-92标准并且优先于CONVERT。
  • ☑当从一个SQL Server对象的数据类型向另一个数据类型转换时,一些隐性和显式数据类型转换是不支持的。例如,nchar数值根本就不能被转换成image数值。nchar只能显式地转换成binary,隐性地转换到binary是不支持的。nchar可以显式地或者隐性地转换成nvarchar。
  • ☑当处理sql variant数据类型时,SQL Server支持将具有其他数据类型的对象隐性转换成sql variant类型。然而,SQL Server并不支持从sql variant数据类型隐性地转换到其他数据类型的对象。 

5.2CAST函数

CAST 函数用于将一个表达式转换为指定的数据类型。它提供了一种显式地将一个数据类型转换为另一个数据类型的方式。

以下是 CAST 函数的语法:

CAST (expression AS data_type)
  • expression:要进行转换的表达式或列名。
  • data_type:要将表达式转换为的目标数据类型。

CAST 函数根据指定的数据类型将表达式转换为相应的数据类型,并返回转换后的值。

以下是一些示例,说明如何使用 CAST 函数:

①将字符串转换为整数类型:

SELECT CAST('123' AS INT) AS ConvertedValue;

运行以上代码,将获得如下结果: 

表示将字符串 '123' 转换为整数类型。

②将浮点数转换为字符串类型:

SELECT CAST(3.14159 AS VARCHAR(7)) AS ConvertedString;

运行以上代码,将获得如下结果: 

表示将浮点数 3.14159 转换为字符串类型,并指定最大长度为 7。 

5.3CONVERT函数

如4.10所讲,CONVERT 函数用于将一个表达式转换为指定的数据类型。但是它提供了一种显式地将一个数据类型转换为另一个数据类型的方式。

以下是 CONVERT 函数的语法:

CONVERT (data_type, expression [, style])
  • data_type:要将表达式转换为的目标数据类型。
  • expression:要进行转换的表达式或列名。
  • style(可选):对于某些数据类型(如日期和时间),可以使用样式参数指定特定的格式。

CONVERT 函数根据指定的数据类型将表达式转换为相应的数据类型,并返回转换后的值。

同4.10所讲,内容一样,以下是一些示例,说明如何使用 CONVERT 函数:

①将字符串转换为整数类型:

SELECT CONVERT(INT, '123') AS ConvertedValue;

运行以上代码,将获得如下结果:

 

表示将字符串 '123' 转换为整数类型。 

②将日期转换为不同的格式:

SELECT CONVERT(VARCHAR(10), GETDATE(), 101) AS FormattedDate;

运行以上代码,将获得如下结果: 

表示将当前日期转换为字符串类型,并使用样式代码 101 格式化为 'MM/DD/YYYY' 的形式。 

六、元数据函数

元数据函数主要是返回与数据库相关的信息,下面是常用的元数据函数COL_LENGTH函数、
COL_NAME函数和DB_NAME函数。

6.1元数据函数概述

元数据函数描述了数据的结构和意义,它主要用于返回数据库中的相应信息,其中包括:

  • ☑返回数据库中数据表或视图的个数和名称。
  • ☑返回数据表中数据字段的名称、数据类型、长度等描述信息。
  • ☑返回数据表中定义的约束、索引、主键或外键等信息。

常用的元数据函数及说明如表所示:

函数名称说明
COL_LENGTH返回列的定义长度(以字节为单位)
COL_NAME返回数据库列的名称,该列具有相应的表标识号和列标识号
DB_NAME返回数据库名
OBJECT_ID返回数据库对象标识号

6.2COL_LENGTH函数

COL_LENGTH 函数用于获取指定表中指定列的长度(以字节为单位)。它返回一个整数值,表示指定列的最大长度。

以下是 COL_LENGTH 函数的语法:

COL_LENGTH ( 'table_name' , 'column_name' )
  • table_name:要查询的表名。
  • column_name:要查询的列名。

COL_LENGTH 函数返回指定表中指定列的最大长度。

以下是一个示例,说明如何使用 COL_LENGTH 函数:

SELECT COL_LENGTH('Employees', 'EmployeeName') AS ColumnLength;

运行以上代码,将获得类似以下结果: 

表示查询了表 Employees 中的列 EmployeeName的最大长度,结果显示该列的最大长度为 100 个字节。 

注意:

COL_LENGTH 函数对于 VARCHAR 和 NVARCHAR 等可变长度的数据类型会返回列的定义长度,而对于 CHAR 和 NCHAR 等固定长度的数据类型,则返回实际占用空间的长度。

6.3COL_NAME函数

COL_NAME 函数用于获取指定表中指定列的名称。它返回一个字符串值,表示指定列的名称。

以下是 COL_NAME 函数的语法:

COL_NAME ( object_id, column_id )
  • object_id:要查询的表或视图的对象 ID。
  • column_id:要查询的列的序号。

COL_NAME 函数返回指定表中指定列的名称。

以下是一个示例,说明如何使用 COL_NAME 函数:

SELECT COL_NAME(OBJECT_ID('Employees'), 1) AS ColumnName;

 运行以上代码,将获得类似以下结果:

表示查询了表 Employees 中第一列的名称,结果显示该列的名称为 EmployeeID。 

注意:

COL_NAME 函数需要提供表或视图的对象 ID 和列的序号来准确确定列,因此需要先使用 OBJECT_ID 函数获取表或视图的对象 ID。

6.4DB_NAME函数

DB_NAME 函数用于获取当前数据库的名称。它返回一个字符串值,表示当前连接上下文中所使用的数据库的名称。

以下是 DB_NAME 函数的语法:

DB_NAME ( [database_id] )
  • database_id(可选):要查询的数据库的 ID。如果未提供此参数,则函数返回当前连接上下文中所使用的数据库的名称。

DB_NAME 函数返回当前数据库的名称。

以下是一个示例,说明如何使用 DB_NAME 函数:

SELECT DB_NAME() AS DatabaseName;

运行以上代码,将获得类似以下结果:

 

表示查询了当前连接上下文中所使用的数据库的名称,结果显示为 【MyDatabase】

注意:

DB_NAME 函数也可以接受一个可选的数据库 ID 参数,以获取指定数据库的名称。如果不提供数据库 ID 参数,则默认返回当前连接上下文中所使用的数据库的名称。

本篇内容是对SQL sever2008中常用的一些函数进行总结,通过一些示例加深理解,后续会整理一篇关于函数的创建及应用。加油干!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java小知识点】类加载器的区别

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理Java类加载器的区别&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&#x1faf…

TDengine(taos)数据库导出历史数据

业务需求&#xff1a;导出某个站点的累计充电量&#xff0c;累计放电量&#xff0c;光伏总放电量&#xff0c;进线总功率的所有数据‘ 1、登录taos&#xff0c;使用存数据的库&#xff1b; 提示Database changed&#xff1b;即为使用成功&#xff1b; 2、找到你想要导出的字段…

USGS MODIS 蒸散量数据集

USGS MODIS 蒸散量 这里提供的蒸散量 (ET) 数据集是遥感技术的结果&#xff0c;主要利用 MODIS 热图像和全球天气数据集。该数据集对应于 Climate Engine 使用的全球 ET 产品的第 5 版。它为 2003 年至 2023 年期间的 ET 时空动态提供了宝贵的见解。该数据集的基石是可操作的简…

【go-zero】go-zero 脚手架 simple-admin 开篇:安装 了解 goctls

一、什么是goctls 1、github地址 官方链接: goctls链接:https://github.com/suyuan32/goctls 官方视频教程: SimpleAdmin环境配置-工具安装 2、goctls说明 二、安装 goctls 1、使用go install 推荐使用 go install 进行安装 我个人使用的是mac的zsh ,之前是git clone的源…

网络通信和tcp协议

一、计算机网络架构模型 1、OSI七层模型 2、TCP/IP模型 3、TCP/IP协议族 无论是什么网络模型&#xff0c;都是为上一层提供服务&#xff0c;抽象层建立在低一层提供的服务上&#xff0c;每层都对应不同的协议 4、地址和端口号 1&#xff09;MAC地址 MAC 地址共 48 位&#…

深入探究Java内存模型

文章目录 &#x1f31f; Java虚拟机内存模型&#x1f34a; 一、方法区&#x1f34a; 二、堆&#x1f389; 堆的基本概念&#x1f389; 堆的结构&#x1f4dd; 新生代&#x1f4dd; 老年代 &#x1f389; 堆的分配策略&#x1f4dd; 对象优先分配&#x1f4dd; 空间优先分配 &am…

数聚携手永达汽车集团强势入选爱分析《商业智能实践案例》

近日&#xff0c;国内知名数字化市场研究咨询机构爱分析发布《2023爱分析商业智能最佳实践案例》&#xff0c;此评选活动面向落地商业智能的各行企业和商业智能厂商&#xff0c;以第三方专业视角深入调研&#xff0c;评选出具有参考价值的创新案例。永达汽车集团与数聚股份合作…

Spring底层原理(二)

Spring底层原理(二) BeanFactory的实现 //创建BeanFactory对象 DefaultListableBeanFactory factory new DefaultListableBeanFactory(); //注册Bean定义对象 AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition(SpringConfig.class).set…

Spring实例化源码解析之Bean的实例化(十二)

前言 本章开始分析finishBeanFactoryInitialization(beanFactory)方法&#xff0c;直译过来就是完成Bean工厂的初始化&#xff0c;这中间就是非lazy单例Bean的实例化流程。ConversionService在第十章已经提前分析了。重点就是最后一句&#xff0c;我们的bean实例化分析就从这里…

蓝桥每日一题(day 6: 蓝桥505.数字三角形)--线性dp--easy

题目&#xff1a; 关注&#xff1a; 本题给出了一个限制&#xff0c;“向左下走的次数与向右下走的次数相差不能超过1”。观察一下&#xff0c;发现&#xff1a;当行数为奇数的时候&#xff0c;只有最后一行的中间的f符合要求&#xff1b;当行数为偶数的时候&#xff0c;只有中…

12.4 组播鼠标批量执行

组播模式相比单播模式可以提高网络的效率和带宽利用率&#xff0c;因为组播数据包只需要发送一次&#xff0c;就可以被多个接收者接收&#xff0c;而不需要每个接收者都单独发送一份数据包。这在需要同时向多个接收者发送相同数据的场景下特别有用&#xff0c;如视频会议、在线…

解救Kubernetes混乱:Descheduler快速实现资源平衡

By default, Kubernetes doesn’t recompute and rebalance workloads. You could have a cluster with fewer overutilized nodes and others with a handful of pods How can you fix this? 关注【云原生百宝箱】公众号&#xff0c;快速掌握云原生 默认情况下&#xff0c;Ku…

RabbitMQ相关的其他知识点

RabbitMQ相关的其他知识点 一、幂等性1.1 概念1.2 消息重复消费1.3 消费端的幂等性保障 二、优先队列2.1 应用场景2.2 实现原理2.3 代码实现 三、惰性队列3.1 定义3.2 应用场景3.3 两种设置模式3.4 内存开销对比 一、幂等性 1.1 概念 用户对于同一操作发起的一次请求或者多次请…

冬天虽冷,希望你们能够坚强一点

养了好多植物&#xff0c;以前来阳台的时候看着个个都挺茂盛&#xff0c;也绿油油的&#xff0c;可天气一变冷&#xff0c;你们当中就有些扛不住了&#xff0c;多肉已经挂了&#xff0c;就剩你们啦&#xff01;希望你们能够坚强一点。

1024程序员节 | 电脑软件:SmartSystemMenu(窗口置顶工具)介绍

目录 一、软件介绍 二、软件用途 三、安装教程 四、功能介绍 五、软件设置 六、软件下载 一、软件介绍 SmartSystemMenu 是一款简单实用的 Windows 窗口增强工具&#xff0c;它可以为窗口的标题栏右键菜单新增 17 个新功能。 二、软件用途 SmartSystemMenu(窗口置顶工具)&#…

Spring实例化源码解析之循环依赖CircularReference(十三)

前言 首先什么是循环依赖&#xff0c;简单说就是互相引用。在Spring中是默认支持循环依赖的&#xff0c;至于怎么解决的循环依赖问题&#xff0c;就是本章要探讨的内容。 // 默认允许循环依赖 private boolean allowCircularReferences true;//提供set方法 public void setA…

Jmeter压测工具和Docker服务端接口压测的安装使用详细教程

安装 参考资料 版本 切换语言 使用步骤 1、新建线程组&#xff1b; 右键“测试计划”(左侧导航中的第一条) > 添加 > 线程&#xff08;用户&#xff09; > 线程组&#xff1b; 线程数&#xff1a;并发数&#xff1b; 2、添加取样器 > HTTP请求&#xff1b; 右…

菜尼奥排错之AttributeError: module ‘mmcv‘ has no attribute ‘dump‘

环境版本&#xff1a; 阿里云PAI平台创建的实例&#xff0c;linux x86-64基础配置如下&#xff1a; pytorch 1.12.0 mmengine 0.8.4 mmcv 2.0.1 mmdet 3.1.0 mmdet3d 1.2.0 报错信息&#xff1a; AttributeError: module mmcv has no attribute dump 本人是在mmcv.dum…

第18章 SpringCloud生态(三)

18.21 Nacos能存储什么样格式的数据(配置中心) 难度:★ 重点:★ 白话解析 看下面这副Nacos控制台的截图就明白了 参考答案 六种格式数据:Text、JSON、XML、Yaml、HTML和Properties格式。 18.22 Nacos是如何实现配置动态更新的(配置中心) 难度:★★ 重点:★★★ 白话…

Linux命令之网络命令ifconfig

一、ifconfig命令简介 ifconfig命令是Linux系统下的一个网络配置工具&#xff0c;用于查看和设置网络接口的配置信息。通过ifconfig命令&#xff0c;用户可以查看当前系统中所有网络接口的详细信息&#xff0c;如IP地址、子网掩码、广播地址等。同时&#xff0c;用户还可以使用…