SQL | replace()函数

语法

replace(object,search,replace)

示例

https://www.nowcoder.com/practice/2bec4d94f525458ca3d0ebf3bc8cd240?tpId=82&tqId=29809&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fsql%2Fquestion-ranking

将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现,直接使用update会报错。

CREATE TABLE titles_test (
   id int(11) not null primary key,
   emp_no  int(11) NOT NULL,
   title  varchar(50) NOT NULL,
   from_date  date NOT NULL,
   to_date  date DEFAULT NULL);

insert into titles_test values
('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');
UPDATE titles_test SET emp_no=REPLACE(emp_no,'10001','10005') WHERE id=5;
### SQL `REPLACE` 函数的使用方法 #### 定义与功能 `REPLACE` 是一种用于字符串操作的标准 SQL 函数,其主要作用是在指定的字符串中查找特定子串并将其替换为目标子串。如果未找到匹配项,则返回原始字符串。 语法如下: ```sql REPLACE(string, search_string, replacement_string) ``` - **string**: 被处理的目标字符串。 - **search_string**: 需要被替换掉的子字符串。 - **replacement_string**: 替换后的目标子字符串。 --- #### 示例代码解析 以下是基于不同数据库系统的具体示例: 1. **简单替换** 下面的例子展示了如何将字符串中的部分字符替换成新的内容[^3]。 ```sql SELECT REPLACE('Hello, World!', 'World', 'Oracle') AS result FROM dual; -- 输出: Hello, Oracle! ``` 2. **多实例替换** 如果源字符串中有多个相同的子串,`REPLACE` 将会逐一替换它们[^2]。 ```sql SET str = "KANSAS, ARKANSAS, NEBRASKA"; SELECT REPLACE(str, 'KANSAS', 'NEBRASKA'); -- 输出: NEBRASKA, ARNEBRASKA, NEBRASKA ``` 3. **结合其他函数** 可以将 `REPLACE` 和其他字符串函数一起使用来实现更复杂的逻辑[^1]。 ```sql SELECT LastName, REVERSE(REPLACE(LastName, 'a', '*')) AS ModifiedReversedLastName FROM Employees; -- 此处先用 REPLACE 修改 Lastname 中的字母'a'为'*',再反转整个字符串 ``` 4. **实际应用案例** 在真实场景下,可以利用该函数完成诸如地址标准化的任务[^4]。 ```sql CREATE TABLE test ( zip VARCHAR(50), city VARCHAR(100), name VARCHAR(100) ); INSERT INTO test (zip, city, name) VALUES ('20000', '上海', 'zhangsan'), ('20006', '南京市', 'lisi'); -- 查询时修改城市名称 SELECT *, REPLACE(city, '南京市', '南京') AS city_n FROM test; -- 更新记录中的邮政编码 UPDATE test SET zip = REPLACE(zip, '20000', '20001') WHERE name = 'zhangsan'; ``` 注意,在某些数据库(如 MySQLSQLite),支持直接通过 `INSERT ... ON DUPLICATE KEY UPDATE` 实现类似的插入更新效果;而在 SQL Server 上则不完全兼容上述语句结构。 --- #### 数据库差异说明 尽管大多数主流关系型数据库都实现了 `REPLACE` 功能,但在细节方面可能存在细微差别: | 特性 | SQL Server | Oracle | MySQL | |---------------------|--------------------|-------------------|-------------------| | 是否区分大小写 || 默认否 || | 返回值类型 | NVARCHAR(MAX)/VARCHAR | VARCHAR2 | TEXT/VARCHAR | 因此,在跨平台开发过程中需特别留意这些潜在的不同之处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值