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é
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
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:
"
au "
symbole "
. '
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. ;
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.
" 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'optionQUOTED 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, ';', '.'), '".', '') As Field1