Подтвердить что ты не робот

Как удалить ведущие и завершающие кавычки в SQL Server?

У меня есть таблица в базе данных SQL Server с столбцом NTEXT. Этот столбец может содержать данные, заключенные в двойные кавычки. Когда я запрашиваю этот столбец, я хочу удалить эти ведущие и трейлинг-кавычки.

Например:

"это тестовое сообщение"

должен стать

это тестовое сообщение

Я знаю функции LTRIM и RTRIM, но они работают только для пробелов. Любые предложения о том, какие функции я могу использовать для достижения этой цели.

4b9b3361

Ответ 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

веселит

Ответ 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