我有一个SQL SELECT
查询,它从我的数据库中获取一些数据。我需要在SELECT
查询中替换包含分号的某个单词。正是这样:
REPLACE(Table.Field,'"','') AS Field1
我得到的错误是
字符串'“'之后的未闭合引号。
所以我认为分号正在终止查询。我怎么能逃脱那个分号?
我尝试使用反斜杠并使用双引号。
根据要求提供一些样本数据和预期输出
Field
"Hello"
"Goodbye"
Field1
Hello
Goodbye
SELECT REPLACE(Table.Name,';','') AS Name,
SUM(Table.Quantity) AS Quantity,
SUM(Table.Price*Table.Quantity) AS Price
FROM Table
GROUP BY Name
答案 0 :(得分:12)
;
符号不会终止查询,如果它是字符串文字的一部分(用单引号'
括起来的文字),则不应对其进行转义。
以下是一个完整的示例,演示了它在SSMS中运行良好:
CREATE TABLE #TempTable (Name varchar(50));
INSERT INTO #TempTable (Name) VALUES('Field');
INSERT INTO #TempTable (Name) VALUES('"Hello"');
INSERT INTO #TempTable (Name) VALUES('"Goodbye"');
SELECT
Name
,REPLACE(Name,'"','') AS ReplacedName
FROM #TempTable;
DROP TABLE #TempTable;
这是结果集:
Name ReplacedName
---- ------------
Field Field
"Hello" Hello
"Goodbye" Goodbye
您没有提供有关如何构建和执行查询的所有详细信息,因此我猜错了。它看起来像你:
"
更改为"
符号。'
符号。它可能来自您从数据库中存储的值连接到查询的用户输入。;
符号无关。您的错误消息明确指出'
符号后缺少匹配的引号("
)。要了解发生了什么,您应该打印出发送到服务器的实际SQL查询的文本。一旦你拥有它,它应该变得明显出错。我不认为您在问题中提出的完整查询是您尝试运行的真实查询。它有语法错误。所以,先得到真实的东西。
答案 1 :(得分:5)
这对我来说很好用
declare @a as nvarchar(50) = '"Hello"'
select REPLACE(@a,'"','') AS Field1
declare @b as nvarchar(50) = '"Goodbye"'
select REPLACE(@b,'"','') AS Field1
错误消息显示未闭合的引号?
你的几个领域是否有单引号? 在这种情况下,您可以先将其替换为
REPLACE(Table.Field,'''','') AS Field1
请告诉我您需要更多帮助。
答案 2 :(得分:2)
" the double quote sign "
我认为此参数不会被称为引用"
的特殊短语并导致您出现错误消息。
在SQL Server中,只有像 QUOTENAME ( 'character_string' [ , 'quote_character' ] )
这样的函数使用如下: - 只适用于'
或"
或[]
-
SELECT QUOTENAME('Sample', '"') --> result is `"Sample"`
SELECT QUOTENAME('Sam"ple', '"') --> result is `"Sam""ple"`
在SQL Server中,标识符可以由"
分隔,当SET QUOTED_IDENTIFIER
为ON
时 - 遵循ISO规则 - 。当SET QUOTED_IDENTIFIER
为OFF
时,无法引用标识符,并且必须遵循标识符的所有Transact-SQL规则。 文字可以用单引号或双引号分隔。
我建议您使用SET QUOTED_IDENTIFIER OFF
确保您在查询中"
之间没有标识符。
注意:
创建表时,即使在创建表时将该选项设置为OFF,QUOTED IDENTIFIER
选项也始终在表的元数据中存储为ON。
如果您使用的是SQL字符串,我建议使用以下语法:
REPLACE(Table.Field, CHAR(34), '') As Field1
或
REPLACE(REPLACE(Table.Field, ';', '.'), '".', '') As Field1