SQL 中的标量函数

2024年8月29日 | 阅读 10 分钟

我们可以对存储在 SQL 数据库中的数据执行各种操作。这可以通过 SQL 提供的内置函数来完成。标量函数是 SQL 中的内置函数,无论输入到标量函数中的是什么,这些函数返回的输出始终是一个单一的值。

在 SQL 中,标量函数独立地操作每个记录。

SQL 中一些常用的标量函数包括:

  1. UCASE()
  2. LCASE()
  3. MID()
  4. LENGTH()
  5. ROUND()
  6. NOW()
  7. FORMAT()

让我们通过示例更详细地了解它们。我们将使用 MySQL 数据库编写所有查询。

假设我们有一个包含以下记录的 customers 表:

ID姓名年龄地址工资
1Himani Gupta21Modinagar22000
2Shiva Tiwari22博帕尔21000
3Ajeet Bhargav45Meerut65000
4Ritesh Yadav36Azamgarh26000
5Balwant Singh45瓦拉纳西36000
6Mahesh Sharma26Mathura22000
7Rohit Shrivastav19Ahemdabad38000
8Neeru Sharma29Pune40000
9Aakash Yadav32孟买43500
10Sahil Sheikh35Aurangabad68800

1. UCASE()

  • UCASE() 或大写函数会将字符串的大小写更改为大写字符。
  • 在这里,字符串也可以作为参数传递,或者包含字符串的表列名也可以作为参数传递给 UCASE() 函数。

将字符串转换为大写的语法

将存储在表列中的字符串转换为大写的语法

SELECT UCASE (ColumnName) FROM TableName;

示例 1

在这里,UCASE() 函数以字符串 'Welcome to Javatpoint' 作为参数,在 SELECT 查询中使用,以大写形式打印字符串。'Upper_Case_String' 是一个别名。

您将得到以下输出

UpperCase_String
WELCOME TO JAVATPOINT

'WELCOME TO JAVATPOINT' 是传递给 UCASE() 函数的参数的大写字符串。因此,它会显示为输出。

示例 2

在这里,'Address' 列以 UCASE() 函数作为参数,在 SELECT 查询中使用,以大写形式打印地址列的值。'Upper_Case_String' 是一个别名。

您将得到以下输出

ID名称年龄Address_UpperCase薪金
1Himani Gupta21MODINAGAR22000
2Shiva Tiwari22BHOPAL21000
3Ajeet Bhargav45MEERUT65000
4Ritesh Yadav36AZAMGARH26000
5Balwant Singh45VARANASI36000
6Mahesh Sharma26MATHURA22000
7Rohit Shrivastav19AHEMDABAD38000
8Neeru Sharma29PUNE40000
9Aakash Yadav32MUMBAI43500
10Sahil Sheikh35AURANGABAD68800

ID、Name、Age 和 salary 列的所有列值都按原样显示。Address 列中的列值以大写形式显示。

2. LCASE()

  • 小写函数会将字符串的大小写更改为小写字符。
  • 在这里,字符串也可以作为参数传递,或者包含字符串的表列名也可以作为参数传递给 LCASE() 函数。

将字符串转换为小写的语法

将存储在表列中的字符串转换为小写的语法

示例 1

在这里,LCASE() 函数以字符串 'WELCOME TO JAVATPOINT' 作为参数,在 SELECT 查询中使用,以小写形式打印字符串。'LowerCase_String' 是一个别名。

您将得到以下输出

LowerCase_String
welcome to javatpoint

'welcome to javatpoint' 是传递给 LCASE() 函数的参数的小写字符串。因此,它会显示为输出。

示例 2

在这里,'Name' 列以 LCASE() 函数作为参数,在 SELECT 查询中使用,以小写形式打印 'Name' 列的值。'NameLowerCase' 是一个别名。

您将得到以下输出

IDNameLowerCase年龄地址薪金
1himani gupta21Modinagar22000
2shiva tiwari21博帕尔21000
3ajeet bhargav45Meerut65000
4ritesh yadav36Azamgarh26000
5balwant singh45瓦拉纳西36000
6mahesh sharma26Mathura22000
7rohit shrivastav19Ahemdabad38000
8neeru sharma29Pune40000
9aakash yadav32孟买43500
10sahil sheikh35Aurangabad68800

ID、Age、Address 和 salary 列的所有列值都按原样显示。'Name' 列中的列值以小写形式显示。

3. MID()

  • MID() 函数用于从包含字符串类型值的表列中提取子字符串。

提取子字符串的语法

其中,

String:包含我们要从中提取字符串特定部分的整个字符串。

Starting index:起始索引中的整数值决定了字符串中的字符是从字符串的开头还是结尾提取。

Length:长度字段中的整数值告诉我们要从字符串中提取的字符数。如果未指定长度,则将提取整个字符串。

注意:Length 是一个可选参数

从表列中提取子字符串的语法

示例 1

在这里,MID() 函数带有三个参数:'Welcome to the world of databases', 16, 18,作为参数传递给 SELECT 查询,以打印从索引 16 开始并包含 18 个字符的子字符串。'Substring' 是一个别名。

您将得到以下输出

子字符串
world of databases

'World of databases' 是传递给 MID() 函数的参数的子字符串。因此,它会显示为输出。

示例 2

在这里,MID() 函数带有三个参数:Name, 3, 5,作为参数传递给 SELECT 查询,以打印从索引 3 开始并包含 5 个字符的子字符串。' NameSubstring ' 是一个别名。

您将得到以下输出

IDNameMid年龄地址薪金
1mani21Modinagar22000
2iva T21博帕尔21000
3eet B45Meerut65000
4tesh36Azamgarh26000
5lwant45瓦拉纳西36000
6hesh26Mathura22000
7hit S19Ahemdabad38000
8eru S29Pune40000
9kash32孟买43500
10hil S35Aurangabad68800

ID、Age、Address 和 salary 列的所有列值都按原样显示。只有从索引 3 开始、包含 5 个字符的子字符串在 'Name' 列中显示。

4. LENGTH()

  • LENGTH() 函数返回列中字符串的长度。

查找字符串长度的语法

从表列查找字符串长度的语法

示例 1

mysql> SELECT LENGTH ("Welcome to the world of databases") AS LengthOfString;

在这里,LENGTH() 函数以字符串 'Welcome to the world of databases' 作为参数,在 SELECT 查询中使用,以打印字符串的长度。'LengthOfString' 是一个别名。

您将得到以下输出

LengthOfString
33

'33' 是传递给 LENGTH() 函数的参数的字符串长度。因此,它会显示为输出。

示例 2

在这里,'Name' 列以 LENGTH() 函数作为参数,在 SELECT 查询中使用,以打印 'Name' 列的值的长度。'LengthOfName' 是一个别名。

您将得到以下输出

IDLengthOfName年龄地址薪金
11221Modinagar22000
21221博帕尔21000
31345Meerut65000
41236Azamgarh26000
51345瓦拉纳西36000
61326Mathura22000
71619Ahemdabad38000
81229Pune40000
91232孟买43500
101235Aurangabad68800

ID、Age、Address 和 salary 列的所有列值都按原样显示。在 'Name' 列中,仅显示字符串的长度。

5. ROUND()

ROUND() 函数用于将数字列四舍五入到指定的精度。

四舍五入数值的语法

其中,

Decimal 表示要获取的小数位数。

从表列中四舍五入数值的语法

示例 1

在这里,ROUND() 函数带有两个包含数值 18000.44444、2 的不同参数,在 SELECT 查询中使用,以打印给定数字的四舍五入值。由于第二个参数为 2,第一个参数中的数字将四舍五入到小数点后两位。' RoundedValue ' 是一个别名。

您将得到以下输出

RoundedValue
18000.44

'18000.44' 是传递给 ROUND() 函数的参数的四舍五入值。因此,它会显示为输出。

示例 2

在这里,ROUND() 函数带有两个包含数值 18000.44444、0 的不同参数,在 SELECT 查询中使用,以打印给定数字的四舍五入值。由于第二个参数为 0,第一个参数中的数字将四舍五入到小数点后零位。' RoundedValue ' 是一个别名。

您将得到以下输出

RoundedValue
18000

'18000' 是传递给 ROUND() 函数的参数的四舍五入值。因此,它会显示为输出。

示例 3

mysql> SELECT ROUND (18000.44444, 3) AS RoundedValue;

在这里,ROUND() 函数带有两个包含数值 18000.44444、3 的不同参数,在 SELECT 查询中使用,以打印给定数字的四舍五入值。由于第二个参数为 3,第一个参数中的数字将四舍五入到小数点后三位。' RoundedValue ' 是一个别名。

您将得到以下输出

RoundedValue
18000.444

'18000.444' 是传递给 ROUND() 函数的参数的四舍五入值。因此,它会显示为输出。

6. NOW()

  • NOW() 函数返回当前的系统日期和时间。

查找当前日期和时间的语法

从表列查找当前日期和时间的语法

示例 1

NOW() 函数在 SELECT 查询中使用,以打印当前的系统日期和时间。'CurrentDatenTime' 是一个别名。

您将得到以下输出

CurrentDatenTime
2021-09-13 10:38:24

'2021-09-13 10:38:24' 是系统的当前日期和时间。因此,它会显示为输出。

示例 2

在这里,NOW() 函数在 SELECT 查询中使用,以在表列中打印当前的系统日期和时间。'DatenTime' 是一个别名。

您将得到以下输出

ID名称年龄地址薪金DatenTime
1Himani Gupta21Modinagar220002021-09-13 20:45:56
2Shiva Tiwari22博帕尔210002021-09-13 20:45:56
3Ajeet Bhargav45Meerut650002021-09-13 20:45:56
4Ritesh Yadav36Azamgarh260002021-09-13 20:45:56
5Balwant Singh45瓦拉纳西360002021-09-13 20:45:56
6Mahesh Sharma26Mathura220002021-09-13 20:45:56
7Rohit Shrivastav19Ahemdabad380002021-09-13 20:45:56
8Neeru Sharma29Pune400002021-09-13 20:45:56
9Aakash Yadav32孟买435002021-09-13 20:45:56
10Sahil Sheikh35Aurangabad688002021-09-13 20:45:56

ID、Name、Age、Address 和 salary 列的所有列值都按原样显示。在 'DatenTime' 列中,显示当前的系统日期和时间。

7. FORMAT()

  • FORMAT() 函数用于格式化列的显示方式。

格式化值的语法

格式化表列中值的语法

SELECT FORMAT (ColumnName, Decimal) FROM TableName;

示例 1

FORMAT() 函数带有两个包含数值 6789.6789、2 的不同参数,在 SELECT 查询中使用,以打印四舍五入后的格式化值。由于第二个参数为 2,第一个参数中的数字将四舍五入到小数点后两位。'Formatted_Number' 是一个别名。

您将得到以下输出

Formatted_Number
6,789.68

'6,789.68' 是传递给 FORMAT() 函数的参数的格式化值。因此,它会显示为输出。

示例 2

ROUND() 函数带有两个包含 'Salary' / 0.5、2 的不同参数,在 SELECT 查询中使用,以打印格式化值。此格式化值将在对 'Salary' 列中的值除以 2 后获得。此外,由于第二个参数为 2,将工资除以 0.5 得到的值将四舍五入到小数点后两位。'FormattedSalary' 是一个别名。

您将得到以下输出

ID名称年龄地址FormattedSalary
1Himani Gupta21Modinagar44,000.00
2Shiva Tiwari22博帕尔42,000.00
3Ajeet Bhargav45Meerut130,000.00
4Ritesh Yadav36Azamgarh52,000.00
5Balwant Singh45瓦拉纳西72,000.00
6Mahesh Sharma26Mathura44,000.00
7Rohit Shrivastav19Ahemdabad76,000.00
8Neeru Sharma29Pune80,000.00
9Aakash Yadav32孟买87,000.00
10Sahil Sheikh35Aurangabad137,600.00

ID、Name、Age 和 Address 列的所有列值都按原样显示。在 'FormattedSalary' 列中,显示格式化的工资值。