Как удалить ведущие и завершающие кавычки в SQL Server?
У меня есть таблица в базе данных SQL Server с столбцом NTEXT. Этот столбец может содержать данные, заключенные в двойные кавычки. Когда я запрашиваю этот столбец, я хочу удалить эти ведущие и трейлинг-кавычки.
Например:
"это тестовое сообщение"
должен стать
это тестовое сообщение
Я знаю функции LTRIM и RTRIM, но они работают только для пробелов. Любые предложения о том, какие функции я могу использовать для достижения этой цели.
Ответы
Ответ 1
Я только что протестировал этот код в MS SQL 2008 и подтвердил его.
Удалить самую левую цитату:
UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 2, LEN(FieldName))
WHERE LEFT(FieldName, 1) = '"'
Удалить правую цитату: (пересмотрена, чтобы избежать ошибки из неявного преобразования типа в int)
UPDATE MyTable
SET FieldName = SUBSTRING(FieldName, 1, LEN(FieldName)-1)
WHERE RIGHT(FieldName, 1) = '"'
Ответ 2
Я думал, что это более простой script, если вы хотите удалить все кавычки
UPDATE Table_Name
SET col_name = REPLACE(col_name, '"', '')
Ответ 3
Я знаю, что это старый вопрос, но моя дочь пришла ко мне с вопросом и указала на эту страницу как возможные ответы. Учитывая, что она охотится за ответом на это, это безопасное предположение, что другие могут все еще быть.
Все это отличные подходы, и, как и все, существует так много способов кошки кошки, как кошки на коже.
Если вы ищете левую обрезку и правую отделку символа или строки, а ваш завершающий символ/строка имеет единую длину, здесь мое предложение:
SELECT SUBSTRING(ColName,VAR, LEN(ColName)-VAR)
Или в этом вопросе...
SELECT SUBSTRING('"this is a test message"',2, LEN('"this is a test message"')-2)
При этом вы просто настраиваете начальную точку SUBSTRING (2) и позицию LEN (-2) на любое значение, необходимое для удаления из вашей строки.
Он не итеративен и не требует явного тестирования случаев, и, прежде всего, он встроен, все из которых делают для более чистого плана выполнения.
Ответ 4
вы можете заменить кавычки пустой строкой...
SELECT AllRemoved = REPLACE(CAST(MyColumn AS varchar(max)), '"', ''),
LeadingAndTrailingRemoved = CASE
WHEN MyTest like '"%"' THEN SUBSTRING(Mytest, 2, LEN(CAST(MyTest AS nvarchar(max)))-2)
ELSE MyTest
END
FROM MyTable
Ответ 5
Вы можете просто использовать функцию "Заменить" в SQL Server.
вот так:
select REPLACE('this is a test message','"','')
note: второй параметр здесь - "двойные кавычки" внутри двух одинарных кавычек, а третий параметр - это просто комбинация двух одинарных кавычек. Идея здесь состоит в том, чтобы заменить двойные кавычки пробелом.
Очень простая и простая в использовании!
Ответ 6
Мое решение состоит в том, чтобы использовать разницу в длине значений столбцов по сравнению с той же длиной столбца, но с двойными кавычками, замененными пробелами и обрезанными для вычисления значений начала и длины в качестве параметров в функции SUBSTRING.
Преимущество такого способа заключается в том, что вы можете удалить любой ведущий или завершающий символ, даже если это происходит несколько раз, оставив любые символы, содержащиеся в тексте.
Вот мой ответ с некоторыми тестовыми данными:
SELECT
x AS before
,SUBSTRING(x
,LEN(x) - (LEN(LTRIM(REPLACE(x, '"', ' ')) + '|') - 1) + 1 --start_pos
,LEN(LTRIM(REPLACE(x, '"', ' '))) --length
) AS after
FROM
(
SELECT 'test' AS x UNION ALL
SELECT '"' AS x UNION ALL
SELECT '"test' AS x UNION ALL
SELECT 'test"' AS x UNION ALL
SELECT '"test"' AS x UNION ALL
SELECT '""test' AS x UNION ALL
SELECT 'test""' AS x UNION ALL
SELECT '""test""' AS x UNION ALL
SELECT '"te"st"' AS x UNION ALL
SELECT 'te"st' AS x
) a
Что дает следующие результаты:
before after
-----------------
test test
"
"test test
test" test
"test" test
""test test
test"" test
""test"" test
"te"st" te"st
te"st te"st
Следует отметить, что при получении длины мне нужно использовать только LTRIM, а не LTRIM и RTRIM, это связано с тем, что функция LEN не учитывает конечные пробелы.
Ответ 7
Следующий script удаляет кавычки только со значения столбца, если таблица называется [Сообщения], а столбец называется [Описание].
-- If the content is in the form of "anything" (LIKE '"%"')
-- Then take the whole text without the first and last characters
-- (from the 2nd character and the LEN([Description]) - 2th character)
UPDATE [Messages]
SET [Description] = SUBSTRING([Description], 2, LEN([Description]) - 2)
WHERE [Description] LIKE '"%"'
Ответ 8
Некоторые UDF для повторного использования.
Левая обрезка по символу (любое число)
CREATE FUNCTION [dbo].[LTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN
RETURN REPLACE(REPLACE(LTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END
Правая обрезка по символу (любое число)
CREATE FUNCTION [dbo].[RTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN
RETURN REPLACE(REPLACE(RTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END
Обратите внимание, что фиктивный символ '|' (Alt + 0166) не может присутствовать в данных (вы можете проверить свою входную строку, во-первых, если не уверены или используете другой символ).
Ответ 9
Вы можете попробовать это -
SELECT left(right(cast(SampleText as nVarchar),LEN(cast(sampleText as nVarchar))-1),LEN(cast(sampleText as nVarchar))-2)
FROM TableName
веселит
Ответ 10
CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX), @Char varchar(5))
RETURNS VARCHAR(MAX)
BEGIN
RETURN SUBSTRING(@String,PATINDEX('%[^' + @Char + ' ]%',@String)
,(DATALENGTH(@String)+2 - (PATINDEX('%[^' + @Char + ' ]%'
,REVERSE(@String)) + PATINDEX('%[^' + @Char + ' ]%',@String)
)))
END
GO
Select dbo.TRIM('"this is a test message"','"')
Ссылка: http://raresql.com/2013/05/20/sql-server-trim-how-to-remove-leading-and-trailing-charactersspaces-from-string/
Ответ 11
Я использую это:
UPDATE DataImport
SET PRIO =
CASE WHEN LEN(PRIO) < 2
THEN
(CASE PRIO WHEN '""' THEN '' ELSE PRIO END)
ELSE REPLACE(PRIO, '"' + SUBSTRING(PRIO, 2, LEN(PRIO) - 2) + '"',
SUBSTRING(PRIO, 2, LEN(PRIO) - 2))
END
Ответ 12
Чтобы удалить оба кавычки, вы можете сделать это
SUBSTRING(fieldName, 2, lEN(fieldName) - 2)
вы можете назначить или спроектировать полученное значение
Ответ 13
Вы можете использовать следующий запрос, который работал у меня -
Для обновления -
UPDATE table SET colName= REPLACE(LTRIM(RTRIM(REPLACE(colName, '"', ''))), '', '"') WHERE...
Для выбора -
SELECT REPLACE(LTRIM(RTRIM(REPLACE(colName, '"', ''))), '', '"') FROM TableName