Comment replace les points-virgules

J'ai une requête SQL SELECT qui récupère des données de ma database. Je dois replace un certain mot qui contient un point-virgule dans ma requête SELECT . Exactement ça:

 REPLACE(Table.Field,'"','') AS Field1 

L'erreur que je reçois lit

Unclosed guillemet après la string de caractères '"'.

Je pense donc que le point-virgule met fin à la requête. Comment puis-je échapper à ce point-virgule?

J'ai essayé des barres obliques inverses et en utilisant des guillemets doubles.

Quelques exemples de données et de résultats attendus, comme demandé


Exemple de données

 Field "Hello" "Goodbye" 

Production attendue

 Field1 Hello Goodbye 

Requête complète

 SELECT REPLACE(Table.Name,';','') AS Name, SUM(Table.Quantity) AS Quantity, SUM(Table.Price*Table.Quantity) AS Price FROM Table GROUP BY Name 

Le ; Le symbole ne termine pas la requête et ne doit pas être échappé, s'il fait partie du littéral de string (le text entre guillemets simples).

Voici un exemple complet qui démontre que cela fonctionne bien dans 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; 

C'est le jeu de résultats:

 Name ReplacedName ---- ------------ Field Field "Hello" Hello "Goodbye" Goodbye 

Vous n'avez pas fourni tous les détails sur la façon dont vous construisez et exécutez votre requête, alors j'ai une idée. On dirait que vous êtes:

  • build dynamicment le text de la requête
  • utiliser des outils / langages / technologies basés sur le Web pour cela
  • outil de traitement de text basé sur le Web / langage que vous utilisez parsing le text de votre requête SQL comme s'il s'agissait de HTML et interfère avec le résultat. Pour une chose, ça change " au " symbole " .
  • pendant tout ce traitement, vous vous refindez avec ' symbole ' inégalé ' dans le text de votre SQL. Il pourrait provenir de l'input de l'user que vous concaténez à votre requête d'une valeur stockée dans votre database.
  • cela n'a rien à voir avec le ; symbole. Votre message d'erreur indique clairement que le guillemet correspondant (qui est ' ) est manquant après le symbole " .

Pour comprendre ce qui se passe, vous devez imprimer le text de la requête SQL réelle envoyée au server. Une fois que vous l'avez, il devrait devenir évident ce qui s'est mal passé. Je ne pense pas que la requête complète que vous avez mise dans la question soit la vraie requête que vous essayez d'exécuter. Il a une erreur de syntaxe. Alors, prenez la vraie chose en premier.

Cela fonctionne bien pour moi

 declare @a as nvarchar(50) = '"Hello"' select REPLACE(@a,'"','') AS Field1 declare @b as nvarchar(50) = '"Goodbye"' select REPLACE(@b,'"','') AS Field1 

Le message d'erreur indique un guillemet non fermé?

Avez-vous des guillemets simples dans quelques-uns de vos champs? Dans ce cas, vous pouvez les replace d'abord comme ci-dessous

 REPLACE(Table.Field,'''','') AS Field1 

Faites-moi savoir que vous avez besoin de plus d'aide pour cela.

  • La source
 " the double quote sign " 

Je pense qu'il n'y a pas où ce paramètre est connu comme une phrase spéciale qui fait reference à " et vous causer un message d'erreur.


Dans SQL Server, il y a juste une fonction comme QUOTENAME ( 'character_ssortingng' [ , 'quote_character' ] ) qui est utilisée comme ceci: -Juste pour ' ou " ou []

 SELECT QUOTENAME('Sample', '"') --> result is `"Sample"` SELECT QUOTENAME('Sam"ple', '"') --> result is `"Sam""ple"` 

Dans SQL Server, les identificateurs peuvent être délimités par " , Lorsque SET QUOTED_IDENTIFIER est ON -pour suivre les SET QUOTED_IDENTIFIER Lorsque SET QUOTED_IDENTIFIER est OFF , les identifiants ne peuvent pas être SET QUOTED_IDENTIFIER et doivent suivre toutes les règles Transact-SQL pour les identifiants. guillemets simples ou doubles.

Je vous suggère d'utiliser SET QUOTED_IDENTIFIER OFF pour vous assurer que vous n'avez pas d'identifiant entre " dans votre requête.

Remarque:
Lorsqu'une table est créée, l'option QUOTED IDENTIFIER est toujours stockée sur ON dans les métadonnées de la table même si l'option est désactivée lors de la création de la table.


Si vous utilisez une string SQL, je suggère cette syntaxe:

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

ou

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