STRING_ESCAPE (Transact-SQL)
Экранирует специальные символы в тексте и возвращает текст с экранированными символами. STRING_ESCAPE — это детерминированная функция, впервые представленная в SQL Server 2016.
Синтаксис
Аргументы
text
Выражение nvarcharexpression, представляющее объект, который следует экранировать.
type
Правила экранирования, которые будут применены. В настоящее время поддерживается значение ‘json’ .
Типы возвращаемых данных
Текст nvarchar(max) с экранированными специальными и управляющими символами. В настоящее время с помощью функции STRING_ESCAPE можно экранировать только специальные символы JSON, представленные в таблицах ниже.
| Специальный символ | Закодированная последовательность |
|---|---|
| Кавычки («») | \» |
| Обратная косая черта (\) | \\ |
| Солидус (/) | \/ |
| Отмена | \b |
| Перевод страницы | \f |
| Новая строка | \n |
| Возврат каретки | \r |
| Горизонтальная табуляция | \t |
| Управляющий символ | Закодированная последовательность |
|---|---|
| CHAR(0) | \u0000 |
| CHAR(1) | \u0001 |
| . | . |
| CHAR(31) | \u001f |
Remarks
Примеры
A. Экранирование текста согласно правилам форматирования JSON
Приведенный ниже запрос экранирует специальные символы с использованием правил JSON и возвращает экранированный текст.
Б. Форматирование объекта JSON
Приведенный ниже запрос создает текст в формате JSON на основе числовых и строковых переменных, а затем экранирует все специальные символы JSON в переменных.
Как обрабатывать и экранировать одинарные и двойные кавычки в инструкции SQL-Update
У меня есть этот образец запроса T-SQL и я пробую его на SQL-Server-2008.
Я знаю, что приведенный выше запрос вызовет ошибку.
Итак, как мне обработать-экранировать как одинарные, так и двойные кавычки в инструкции SQL-Update.
Есть ли ситуация, когда у вас есть конкретный текстовый файл, который вы хотите вручную вставить в клиент SQL? Или вы пишете программу для вставки файла и просто тестируете ее на клиенте, чтобы понять, как написать программу? — Russell Zahniser
Спасибо, Рассел . за попытку разобраться в ситуации. Сценарий такой — есть разные системы, которые присылают нам эту строку из 1000+ символов. Теперь эта строка передается как sql-параметр, и мой sql update-query должен вставить строку this в конкретный столбец. — MukeshAnAlsoRan
В точке, где это строка из 1000+ символов, ПРЕЖДЕ, чем она станет параметром SQL, выполните подстановку. Используйте любой подходящий инструмент, grep из командной строки, C # и т. Д., Просто используйте любую доступную функцию поиска-замены до того, как строка 1000+ char станет SQL. — Carl G
Это не похоже на вопрос SQL. Это скорее вопрос системной интеграции. — Carl G
7 ответы
Вы можете экранировать кавычки с помощью обратной косой черты:
Я уже сказал, что добавление вручную косой черты или одинарной кавычки перед каждой цитатой и тому подобное для двойных кавычек неуместно и исключено, потому что приведенный выше пример является всего лишь образцом, а фактическое значение приложения больше 1000. символы. — МукешАнAlsoRan
Используйте две одинарные кавычки, чтобы избежать их в инструкции sql. Двойные кавычки не должны быть проблемой:
How is my son’s school helping him learn? «Not as good as Stack Overflow would!»
ответ дан 02 мар ’16, в 19:03
Спасибо, Майк. НО я уже сказал, что добавление вручную косой черты или одинарной кавычки перед каждой кавычкой и тому подобное для двойных кавычек непрактично и исключено, потому что приведенный выше пример является всего лишь образцом, а фактическое значение приложения больше, чем 1000 знаков. — МукешАнAlsoRan
Если убежать от персонажей непрактично, то я полагаю, что убежать от них будет довольно сложно. В качестве альтернативы вы можете попробовать определить замещающее значение для «и пакетно заменить их, чтобы вы могли выполнить свой запрос. Конечно, вам также придется повторно заменить их на правильные значения, когда они вам понадобятся для отображения. — Макарк1129
Я, Майк .. Я действительно кое-что подумал . о пакетной замене и тому подобном. НО я считаю, что для этого сценария это было бы излишним, и SQL должен иметь какой-то врожденный элегантный способ справиться с этим, потому что эта проблема существовала бы и 10 лет назад. — МукешАнAlsoRan
Как ни странно, Stack Overflow учит детей хорошо учиться, но не учиться хорошо: | — Romnempire
В зависимости от того, на каком языке вы программируете, вы можете использовать функцию для замены двойных кавычек двумя двойными кавычками.
Например, в PHP это будет:
Если вы пытаетесь сделать это, используя только SQL, возможно, ЗАМЕНЯТЬ() это то, что вы ищете.
PL/SQL, how to escape single quote in a string?
In the Oracle PL/SQL, how to escape single quote in a string ? I tried this way, it doesn’t work.
5 Answers 5
You can use literal quoting:
Documentation for literals can be found here.
Alternatively, you can use two quotes to denote a single quote:
The literal quoting mechanism with the Q syntax is more flexible and readable, IMO.
Here’s a blog post that should help with escaping ticks in strings.
Here’s the simplest method from said post:
The most simple and most used way is to use a single quotation mark with two single quotation marks in both sides.
SELECT ‘test single quote»’ from dual;
The output of the above statement would be:
test single quote’Simply stating you require an additional single quote character to print a single quote character. That is if you put two single quote characters Oracle will print one. The first one acts like an escape character.
This is the simplest way to print single quotation marks in Oracle. But it will get complex when you have to print a set of quotation marks instead of just one. In this situation the following method works fine. But it requires some more typing labour.