如何更换分号?

时间:2015-05-04 02:08:45

标签: sql-server replace sql-server-2005

我有一个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

3 个答案:

答案 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

您没有提供有关如何构建和执行查询的所有详细信息,因此我猜错了。它看起来像你:

  • 动态构建查询文本
  • 使用一些基于网络的工具/语言/技术
  • 您使用的基于Web的文本处理工具/语言将SQL查询的文本解析为HTML,并干扰结果。首先,它将"更改为"符号。
  • 在所有这些处理过程中,您最终会在SQL文本中找到不匹配的'符号。它可能来自您从数据库中存储的值连接到查询的用户输入。
  • 它与;符号无关。您的错误消息明确指出'符号后缺少匹配的引号(")。

要了解发生了什么,您应该打印出发送到服务器的实际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_IDENTIFIERON时 - 遵循ISO规则 - 。当SET QUOTED_IDENTIFIEROFF时,无法引用标识符,并且必须遵循标识符的所有Transact-SQL规则。 文字可以用单引号或双引号分隔。

我建议您使用SET QUOTED_IDENTIFIER OFF确保您在查询中"之间没有标识符。

  

注意:
  创建表时,即使在创建表时将该选项设置为OFF,QUOTED IDENTIFIER选项也始终在表的元数据中存储为ON。

如果您使用的是SQL字符串,我建议使用以下语法:

REPLACE(Table.Field, CHAR(34), '') As Field1

REPLACE(REPLACE(Table.Field, ';', '.'), '&quot.', '') As Field1