SQL Server如何将包含双引号的字符串替换为双引号内的内容
解决方案
核心逻辑是定位字符串中第一个和第二个双引号的位置,直接截取两个位置中间的内容即可,无需逐个定义替换规则。以下是不同主流数据库的实现代码:
- MySQL
SELECT SUBSTRING( `Pill Type`, LOCATE('"', `Pill Type`) + 1, LOCATE('"', `Pill Type`, LOCATE('"', `Pill Type`) + 1) - LOCATE('"', `Pill Type`) - 1 ) AS `Pill Type` FROM 你的表名;
- SQL Server
SELECT SUBSTRING( [Pill Type], CHARINDEX('"', [Pill Type]) + 1, CHARINDEX('"', [Pill Type], CHARINDEX('"', [Pill Type]) + 1) - CHARINDEX('"', [Pill Type]) - 1 ) AS [Pill Type] FROM 你的表名;
- PostgreSQL
可以直接用SPLIT_PART按双引号分割取第二部分,写法更简洁:
SELECT SPLIT_PART("Pill Type", '"', 2) AS "Pill Type" FROM 你的表名;
- Oracle
SELECT SUBSTR( "Pill Type", INSTR("Pill Type", '"') + 1, INSTR("Pill Type", '"', 1, 2) - INSTR("Pill Type", '"') - 1 ) AS "Pill Type" FROM 你的表名;
如果存在部分行没有双引号的场景,可以增加判断逻辑避免返回异常结果,以MySQL为例:
SELECT IF( LOCATE('"', `Pill Type`) > 0 AND LOCATE('"', `Pill Type`, LOCATE('"', `Pill Type`) + 1) > 0, SUBSTRING( `Pill Type`, LOCATE('"', `Pill Type`) + 1, LOCATE('"', `Pill Type`, LOCATE('"', `Pill Type`) + 1) - LOCATE('"', `Pill Type`) - 1 ), `Pill Type` ) AS `Pill Type` FROM 你的表名;
内容的提问来源于stack exchange,提问作者Brady Nelson
相关产品推荐
相关产品推荐

