SQL STUFF()函数
SQL STUFF() 函数用于在另一个字符串中插入一个字符串。
它接受 四个 参数 char_exp 、 start 、 length 和 replace_with_exp ,删除第一个字符串中指定长度的字符,并将第二个字符串插入到第一个字符串的起始位置。
- 如果 start 参数值为 负数、零 或超过第一个表达式的长度,则返回一个 null 字符串。
-
如果 length 参数值为 负数 ,则返回一个 null 字符串;如果长度超过第一个表达式,则删除到第二个表达式中的最后一个字符。
-
如果 length 为 零 ,则在起始位置插入,并且不会从第一个表达式中删除任何字符。
语法
以下是SQL STUFF() 函数的语法:
STUFF ( character_expression , start , length , replace_with_expression )
参数
- character_expression - 这是一个字符数据表达式(第一个字符串)。
-
start - 这是一个整数值,指定删除和插入的位置。
-
length - 这是一个整数值,指定要删除的字符数。
-
replace_with_expression - 这是一个字符数据表达式(第二个字符串)。
返回值
此函数通过在指定的删除位置插入第二个表达式来返回一个新字符串。
示例
在以下示例中,我们使用SQL中的 STUFF() 函数将字符串第二个 ‘world’ 插入到第一个字符串 ‘hello’ 的指定起始位置 2 和长度 3 。
SELECT STUFF('hello', 2, 3, 'world') AS NEW_STR;
输出
上述SQL查询生成以下输出:
+----------+
| NEW_STR |
+----------+
| hworldo |
+----------+
示例
如果将start参数值传递给函数时,其值为 NULL或0(零) ,则函数将返回一个 NULL 字符串。
在此示例中,我们使用 STUFF() 函数将第二个字符串 ‘defgh’ 插入到第一个字符串 ‘abc’ 中的指定起始位置 NULL或0 和长度 2 。
SELECT STUFF('abc', NULL, 2, 'defgh') AS NEW_STR;
SELECT STUFF('abc', 0, 2, 'defgh') AS NEW_STR;
输出
以下是上述查询的输出结果 –
+----------+
| NEW_STR |
+----------+
| NULL |
+----------+
示例
如果将长度参数值传递给函数时设为-1(负值),则 STUFF() 函数将返回一个 NULL 字符串。
在这个程序中,我们使用SQL的 STUFF() 函数将字符串 ‘point’ 插入字符串 ‘Tutorials’ 的指定起始位置 2 和长度 -1 。
SELECT STUFF('Tutorials', 2, -1, 'point') AS NEW_STR;
输出
执行上述程序后,将产生以下输出:
+----------+
| NEW_STR |
+----------+
| NULL |
+----------+
示例
如果 length 参数值被传递为 零 ,插入将发生在起始位置,并且不会从第一个表达式中删除任何字符。
SELECT STUFF('Tutorials', 2, 0, 'point') AS NEW_STR;
输出
执行上述语句后,会生成以下输出:
+----------------+
| NEW_STR |
+----------------+
| Tpointutorials |
+----------------+
示例
如果 长度 参数值 长于第一个表达式 ,则删除将发生直到第二个表达式中的最后一个字符。
在下面的示例中,我们使用SQL的 STUFF() 函数将第二个字符串 ‘point’ 插入到第一个字符串 ‘Tutorials’ 中的指定起始位置 2 ,并且长度的值比第一个字符串 15 。
SELECT STUFF('Tutorials', 2, 15, 'point') AS NEW_STR;
输出
以下是上述查询的输出结果:
+----------------+
| NEW_STR |
+----------------+
| Tpoint |
+----------------+
示例
您还可以将列的名称作为参数传递给SQL的 STUFF() 函数,将单列值插入到另一列中。假设我们使用以下 CREATE 语句创建了名为 Customers 的表:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
FIRST_NAME VARCHAR (20),
LAST_NAME VARCHAR(20),s
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2));
让我们使用以下方式使用 INSERT 语句将一些记录插入到 Customers 表中:
INSERT INTO CUSTOMERS VALUES (1, 'Rohan','Verma', 33, 'Hyderbad', 2100.00 );
INSERT INTO CUSTOMERS VALUES (2, 'Kamlesh','Kumar', 30, 'Lucknow', 2500.00 );
INSERT INTO CUSTOMERS VALUES (3, 'Seeta','Sharma', 23, 'Delhi', 3150.00 );
下面的SQL查询将一个列 LAST_NAME 的值插入另一个列 FIRST_NAME 中的 Customer 数据表中:
SELECT ID, FIRST_NAME,LAST_NAME, STUFF(FIRST_NAME, 2, 4, LAST_NAME) AS NEW_NAME FROM CUSTOMERS;
输出
以下是上述查询的输出−
+----+------------+-------------+-----------+
| ID | FIRST_NAME | LAST_NAME |NEW_NAME |
+----+------------+-------------+-----------+
| 1 | Rohan | Verma | RVerma |
| 2 | Kamlesh | Kumar | KKumarsh |
| 3 | Seeta | Sharma | SSharma |
+----+------------+-------------+-----------+