SQL 标量函数
我们可以对存储在SQL数据库中的数据执行不同的操作。这可以借助SQL提供的内置函数来实现。 标量函数是SQL中的内置函数,无论标量函数被提供什么输入,这些函数返回的输出始终是单个值。
在SQL中,每个记录都由标量函数独立操作。
SQL中常用的一些标量函数包括:
- UCASE()
- LCASE()
- MID()
- LENGTH()
- ROUND()
- NOW()
- FORMAT()
让我们通过示例详细了解每个函数。我们将使用MySQL数据库来编写所有查询。
假设我们有以下记录的 customers 表:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Himani Gupta | 21 | Modinagar | 22000 |
2 | Shiva Tiwari | 22 | Bhopal | 21000 |
3 | Ajeet Bhargav | 45 | Meerut | 65000 |
4 | Ritesh Yadav | 36 | Azamgarh | 26000 |
5 | Balwant Singh | 45 | Varanasi | 36000 |
6 | Mahesh Sharma | 26 | Mathura | 22000 |
7 | Rohit Shrivastav | 19 | Ahemdabad | 38000 |
8 | Neeru Sharma | 29 | Pune | 40000 |
9 | Aakash Yadav | 32 | Mumbai | 43500 |
10 | Sahil Sheikh | 35 | Aurangabad | 68800 |
1. UCASE()
- UCASE() 或 upper case 函数将字符串的大小写更改为大写字符。
- 这里,字符串也可以作为参数传递,或者包含字符串的表格列名也可以作为参数传递给 UCASE() 函数。
将字符串转换为大写的语法:
SELECT UCASE (String);
或
语法用于将存储在表的列中的字符串转换为大写:
SELECT UCASE (列名) FROM 表名;
示例1:
mysql> SELECT UCASE ("Welcome to Javatpoint") AS UpperCase_String;
这里,使用UCASE()函数以字符串’Welcome to Javatpoint’作为参数,在SELECT查询中使用该函数以将字符串打印为大写。’Upper_Case_String’是一个别名。
您将得到以下输出:
UpperCase_String
---
WELCOME TO JAVATPOINT
‘WELCOME TO JAVATPOINT’是传递给UCASE()函数的大写字符串。 因此,它会显示为输出。
示例2:
mysql> SELECT ID, Name, Age, UCASE (Address) AS Address_UpperCase, Salary FROM customers;
在这里,“Address”列被作为参数传递给SELECT查询中的UCASE()函数,以打印地址列的值(以大写形式)。‘Upper_Case_String’是别名。
你将得到以下输出:
ID | Name | Age | Address_UpperCase | Salary |
---|---|---|---|---|
1 | Himani Gupta | 21 | MODINAGAR | 22000 |
2 | Shiva Tiwari | 22 | BHOPAL | 21000 |
3 | Ajeet Bhargav | 45 | MEERUT | 65000 |
4 | Ritesh Yadav | 36 | AZAMGARH | 26000 |
5 | Balwant Singh | 45 | VARANASI | 36000 |
6 | Mahesh Sharma | 26 | MATHURA | 22000 |
7 | Rohit Shrivastav | 19 | AHEMDABAD | 38000 |
8 | Neeru Sharma | 29 | PUNE | 40000 |
9 | Aakash Yadav | 32 | MUMBAI | 43500 |
10 | Sahil Sheikh | 35 | AURANGABAD | 68800 |
所有的列值(ID,Name,Age和salary)都按原样展示。而address列中的列值将以大写形式展示。
2. LCASE()
- 小写函数将字符串的大小写转换为小写字符。
- 在这里,字符串也可以作为参数传递,或者包含字符串的表的列名也可以作为参数传递给LCASE()函数。
将字符串转换为小写的语法:
SELECT LCASE (String);
或者
将存储在表列中的字符串转换为小写的语法:
SELECT LCASE (ColumnName) FROM TableName;
示例1:
mysql> SELECT LCASE ("WELCOME TO JAVATPOINT") AS LowerCase_String;
在这里,将LCASE()函数与字符串“WELCOME TO JAVATPOINT”作为参数在SELECT查询中使用,以将字符串以小写形式打印出来。’LowerCase_String’是一个别名。
您将获得以下输出:
LowerCase_String
---
welcome to javatpoint
‘ welcome to javatpoint ‘ 是传递给 LCASE() 函数的小写字符串参数。因此,它将作为输出显示。
示例2:
mysql> SELECT ID, LCASE (Name) AS NameLowerCase, Age, Address, Salary FROM customers;
在这里,’Name’列被作为参数传递给SELECT查询中的LCASE()函数,以打印’Name’列的值(小写形式)。’NameLowerCase’是一个别名。
您将获得以下输出:
ID | NameLowerCase | Age | Address | Salary |
---|---|---|---|---|
1 | himani gupta | 21 | Modinagar | 22000 |
2 | shiva tiwari | 21 | Bhopal | 21000 |
3 | ajeet bhargav | 45 | Meerut | 65000 |
4 | ritesh yadav | 36 | Azamgarh | 26000 |
5 | balwant singh | 45 | Varanasi | 36000 |
6 | mahesh sharma | 26 | Mathura | 22000 |
7 | rohit shrivastav | 19 | Ahemdabad | 38000 |
8 | neeru sharma | 29 | Pune | 40000 |
9 | aakash yadav | 32 | Mumbai | 43500 |
10 | sahil sheikh | 35 | Aurangabad | 68800 |
所有列值出现的ID,年龄,地址和薪水都按原样显示。出现在“姓名”列中的列值以小写显示。
3. MID()
- MID()函数用于从表的列中提取子字符串,该列包含字符串类型的值。
提取子字符串的语法:
SELECT MID (string, start, length);
其中,
String: 包含我们想要从中提取特定部分字符串的整个字符串。
Starting index(起始索引): 起始索引中的整数值决定了从字符串的开始或结束处提取字符串的字符的位置。
Length(长度): 长度字段中的整数值告诉我们从字符串中提取的字符的数量。如果未指定长度,则将提取整个字符串。
注:长度是可选参数
或者
用于提取存储在表的列中的子字符串的语法:
SELECT MID (ColumnName, start, length) FROM TableName;
示例1:
mysql> SELECT MID ("Welcome to the world of databases", 16, 18) AS Substring;
在这里,使用三个参数:’Welcome to the world of databases’,16, 18 的 MID () 函数作为参数传递给 SELECT 查询,以打印从索引 16 开始并包含 18 个字符的子字符串。’Substring’ 是一个别名。
您将得到以下输出:
Substring
---
world of databases
‘world of databases’是传递给MID()函数的参数的子字符串。因此,它作为输出显示。
例2:
mysql> SELECT ID, MID (Name, 3, 5) AS NameSubstring, Age, Address, Salary FROM customers;
这里,MID()函数有三个参数:name, 3, 5作为参数传递给SELECT查询,以打印以索引3开始且包含5个字符的子字符串。’NameSubstring’是一个别名。
将会获得以下输出结果:
ID | NameMid | Age | Address | Salary |
---|---|---|---|---|
1 | mani | 21 | Modinagar | 22000 |
2 | iva T | 21 | Bhopal | 21000 |
3 | eet B | 45 | Meerut | 65000 |
4 | tesh | 36 | Azamgarh | 26000 |
5 | lwant | 45 | Varanasi | 36000 |
6 | hesh | 26 | Mathura | 22000 |
7 | hit S | 19 | Ahemdabad | 38000 |
8 | eru S | 29 | Pune | 40000 |
9 | kash | 32 | Mumbai | 43500 |
10 | hil S | 35 | Aurangabad | 68800 |
在ID、Age、Address和salary列中显示所有的列值都是原封不动的。只有以索引3开始并且包含5个字符的子串才会在“Name”列中显示。
4. LENGTH()
- LENGTH()函数返回列中字符串的长度。
查找字符串长度的语法:
SELECT LENGTH (String);
或 用于从表列中查找字符串长度的语法:
SELECT LENGTH (ColumnName) FROM TableName;
示例 1:
mysql> SELECT LENGTH (“欢迎来到数据库的世界”) AS LengthOfString;
在这里,使用带有字符串“欢迎来到数据库的世界”作为参数的 LENGTH() 函数在 SELECT 查询中用于打印字符串的长度。’LengthOfString’ 是一个别名。
您将获得以下输出结果:
LengthOfString
---
33
’33’是传递给LENGTH()函数的参数的字符串长度。因此,它作为输出显示。
示例2:
mysql> SELECT ID, LENGTH (Name) AS LengthOfName, Age, Address, Salary FROM customers;
在这里,’Name’列作为参数传递给SELECT查询中的LENGTH()函数,以打印出’Name’列的值的长度。’LengthOfName’是一个别名。
您将获得以下输出:
ID | LengthOfName | Age | Address | Salary |
---|---|---|---|---|
1 | 12 | 21 | Modinagar | 22000 |
2 | 12 | 21 | Bhopal | 21000 |
3 | 13 | 45 | Meerut | 65000 |
4 | 12 | 36 | Azamgarh | 26000 |
5 | 13 | 45 | Varanasi | 36000 |
6 | 13 | 26 | Mathura | 22000 |
7 | 16 | 19 | Ahemdabad | 38000 |
8 | 12 | 29 | Pune | 40000 |
9 | 12 | 32 | Mumbai | 43500 |
10 | 12 | 35 | Aurangabad | 68800 |
所有ID,年龄,地址和薪资栏目的值都如原样显示。在“姓名”栏目中,只显示字符串的长度。
5. ROUND()
ROUND()函数用于将数字列四舍五入到指定的小数位数。
要将数字值四舍五入的语法:
SELECT ROUND (NumericValue, Decimals);
其中,
Decimal代表要获取的小数位数。
或者
从表的列中四舍五入数字值的语法:
SELECT ROUND (ColumnName, Decimals) FROM TableName;
示例 1:
mysql> SELECT ROUND (18000.44444, 2) AS RoundedValue;
在这里,使用带有两个包含数值18000.44444、2的不同参数的ROUND()函数在SELECT查询中打印给定数字的四舍五入值。由于2作为第二个参数传递,传递给第一个参数的数字将四舍五入到两位小数点。’RoundedValue’是一个别名。
您将获得以下输出:
RoundedValue
---
18000.44
‘18000.44’是传递给 ROUND() 函数的参数的四舍五入值。因此,它被显示为输出。
例子2:
mysql> SELECT ROUND (18000.44444, 0) AS RoundedValue;
在这里,使用具有包含数值18000.44444、0的两个不同参数的ROUND()函数在SELECT查询中打印给定数字的舍入值。由于传递0作为第二个参数,因此第一个参数中传递的数字将被截断为没有小数点的值。’RoundedValue’是一个别名。
你将会得到以下输出:
RoundedValue
---
18000
‘18000’是传递给ROUND()函数的参数的四舍五入值。因此,它作为输出显示。
示例3:
mysql> SELECT ROUND (18000.44444, 3) AS RoundedValue;
在这里,SELECT查询中使用包含数值18000.44444、3的两个不同参数的ROUND()函数来打印给定数字的四舍五入值。由于3被传递为第二个参数,所以传递给第一个参数的数字将保留到小数点后三位。’RoundedValue’是一个别名。
你将获得以下输出:
RoundedValue
---
18000.444
‘18000.444’ 是传递给 ROUND() 函数的参数取整后的值。因此,它被显示为输出结果。
6. NOW()
- NOW() 函数返回当前系统的日期和时间。
查找当前日期和时间的语法:
SELECT NOW ();
或
从表格的列中查找当前日期和时间的语法:
SELECT NOW () FROM TableName;
示例 1:
mysql> SELECT NOW () AS CurrentDatenTime;
NOW()函数用于SELECT查询中打印当前系统的日期和时间。’CurrentDatenTime’是一个别名。
您将获得以下输出:
CurrentDatenTime
---
2021-09-13 10:38:24
‘2021-09-13 10:38:24’ 是当前系统的日期和时间。因此,它作为输出显示。
示例2:
mysql> SELECT ID, Name, Age, Address, Salary, NOW () AS 'DatenTime' FROM customers;
这里,NOW()函数被用在SELECT查询中,在表的列中打印当前系统的日期和时间。‘DatenTime’ 是一个别名。
你将会得到以下的输出结果:
ID | Name | Age | Address | Salary | DatenTime |
---|---|---|---|---|---|
1 | Himani Gupta | 21 | Modinagar | 22000 | 2021-09-13 20:45:56 |
2 | Shiva Tiwari | 22 | Bhopal | 21000 | 2021-09-13 20:45:56 |
3 | Ajeet Bhargav | 45 | Meerut | 65000 | 2021-09-13 20:45:56 |
4 | Ritesh Yadav | 36 | Azamgarh | 26000 | 2021-09-13 20:45:56 |
5 | Balwant Singh | 45 | Varanasi | 36000 | 2021-09-13 20:45:56 |
6 | Mahesh Sharma | 26 | Mathura | 22000 | 2021-09-13 20:45:56 |
7 | Rohit Shrivastav | 19 | Ahemdabad | 38000 | 2021-09-13 20:45:56 |
8 | Neeru Sharma | 29 | Pune | 40000 | 2021-09-13 20:45:56 |
9 | Aakash Yadav | 32 | Mumbai | 43500 | 2021-09-13 20:45:56 |
10 | Sahil Sheikh | 35 | Aurangabad | 68800 | 2021-09-13 20:45:56 |
ID,名称,年龄,地址和薪水中的所有列值都按原样显示。在“DatenTime”列中,显示当前系统的日期和时间。
7. FORMAT()
- 使用FORMAT()函数来格式化要显示的列。
格式化值的语法:
SELECT FORMAT (Value, Decimal);
或者
用于格式化表格列中的值的语法:
SELECT FORMAT (ColumnName, Decimal) FROM TableName;
示例 1:
mysql> SELECT FORMAT (6789.6789, 2) AS Formatted_Number;
FORMAT()函数 使用两个不同的参数包含数值6789.6789,2用于SELECT查询,在给定数字四舍五入后打印格式化值。由于2作为第二个参数传递,第一个参数中传递的数字将四舍五入为两位小数。’Formatted_Number’是一个别名。
您将获得以下输出:
Formatted_Number
---
6,789.68
‘6,789.68’ 是作为参数传递给 FORMAT() 函数的格式化值。因此,它作为输出显示。
示例2:
mysql> SELECT ID, Name, Age, Address, FORMAT (Salary / 0.5, 2) AS FormattedSalary FROM customers;
使用带有两个不同参数的ROUND()函数来包含列“Salary”/0.5,2的SELECT查询,以打印格式化值。这个格式化值将在“Salary”列中包含的值除以2之后获得。此外,由于2作为第二个参数传递,将对用工资除以0.5得到的值四舍五入到小数点后两位。“FormattedSalary”是一个别名。
您将获得以下输出:
ID | Name | Age | Address | FormattedSalary |
---|---|---|---|---|
1 | Himani Gupta | 21 | Modinagar | 44,000.00 |
2 | Shiva Tiwari | 22 | Bhopal | 42,000.00 |
3 | Ajeet Bhargav | 45 | Meerut | 130,000.00 |
4 | Ritesh Yadav | 36 | Azamgarh | 52,000.00 |
5 | Balwant Singh | 45 | Varanasi | 72,000.00 |
6 | Mahesh Sharma | 26 | Mathura | 44,000.00 |
7 | Rohit Shrivastav | 19 | Ahemdabad | 76,000.00 |
8 | Neeru Sharma | 29 | Pune | 80,000.00 |
9 | Aakash Yadav | 32 | Mumbai | 87,000.00 |
10 | Sahil Sheikh | 35 | Aurangabad | 137,600.00 |
所有在ID、姓名、年龄和地址中的列值都按原样显示。在“FormattedSalary”列中,显示格式化的薪资值。