sql - SQL Server 中字符串的单引号
问题描述
DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';
DECLARE @xml xml
DECLARE @XMT_TEXT AS VARCHAR(200)
SET @XMT_TEXT = REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ')
SET @xml = cast(('<X>' + @XMT_TEXT + '</X>') as xml)
SELECT N.value('.', 'varchar(50)') as value
FROM @xml.nodes('X') as T(N);
我的输出:
1. 'Prudhvi, raj
2. Lalith, Kumar'
预期输出:
1. 'Prudhvi, raj'
2. 'Lalith, Kumar'
解决方案
如果您删除所有与 XML 相关的代码并离开
DECLARE @rpmProvider varchar(200) = 'Prudhvi, raj,Lalith, Kumar';
select REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '</X><X>'), '|', ', ')
你会看到周围没有引号。结果是
'Prudhvi, raj</X><X>Lalith, Kumar'
您可以通过将替换字符串更改为''</X><X>''
,在标签前后使用两个单引号来解决此问题:
select REPLACE(REPLACE(REPLACE(''''+ @rpmProvider + '''', ', ', '|'), ',', '''</X><X>'''), '|', ', ')
现在的结果是:
'Prudhvi, raj'</X><X>'Lalith, Kumar'
不过,这段代码非常脆弱。它依赖空格来分隔键、值和对。SQL 语言在字符串解析和操作方面非常薄弱。这种解析应该在数据存储到数据库之前完成。
推荐阅读
- corda - 在 Contract 类中获取 Command 的正确方法是什么
- mysql - mysql中Window函数实现遇到语法错误
- kotlin - 如何在gradle中强制降级插件版本?
- scala - 在Scala中,如何在另一个类中实例化一个类N次
- urllib3 - 使用python自动下载pdf
- java - vscode 中的 Minecraft 织物编码问题
- django - django动态加载静态文件
- android - Android Studio adding gradle repository gives "Invalid variable name. Must start with a letter"
- c# - 如何在一个视图中使用两个模型?
- c# - 如何在 asp.net C# 中第一次执行该事件后执行 RadioButtonList_SelectedIndexChanged 事件处理程序?