как удалить [] и «» из значения столбца

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть значения строк для одного из столбцов, подобных этому [«576373»] . Как можно выбрать только 576373

Комментарии:

1. Предположение здесь — я предполагаю, что значение в столбце явно либо [«576373»], либо «576373», с включенными кавычками и, возможно, квадратными скобками. Я отвечу, основываясь на этом предположении.

2. Нужна дополнительная информация. Всегда 6 цифр? Или различное число? Они всегда являются числами?

3. Цифры могут различаться, и да, значение [«932846»], и я хочу получить это 932846

4. replace(replace(replace(MyColumn,'[',''),']',''),'"','')

5. В зависимости от вашей версии SQL, SELECT JSON_VALUE(YourJsonColumn, '$[0]') FROM dbo.YourTable;

Ответ №1:

Есть несколько способов получить это. Интересный способ сделать это — использовать функцию PARSENAME.

 SELECT PARSENAME( PARSENAME( '["576373"]', 1), 1);
  

Вы также можете использовать вложенные функции ЗАМЕНЫ. Вот сравнение обоих вариантов.

 SELECT PARSENAME( PARSENAME( SomeString, 1), 1),
       REPLACE( REPLACE( REPLACE( SomeString, '[', ''), ']', ''), '"', '')
FROM (VALUES('["576373"]'), ('[57637]'), ('"76373"'))x(SomeString);
  

Комментарии:

1. Мне нравится стандартное использование PARSENAME.

2. Отличная работа с именем синтаксического анализа!!! Я не верил, что это сработает, но это так. 1

Ответ №2:

Если вам нужно удалить квадратные скобки и кавычки из значения в столбце (как показано в вашем вопросе выше), есть несколько методов, которые вы можете использовать. Вот несколько, основанных на разных ситуациях:

  1. Данные всегда включают символы [» и «]. В этом случае ПОДСТРОКА вернет данные, которые вам нужны быстрее всего:

В этом случае используйте этот код:

 -- This simply removes those first two and last two characters.
SELECT SUBSTRING(MyColumnName, 3, Len(MyColumnName) - 4) as FinalValue
  
  1. Данные могут содержать любую комбинацию кавычек и квадратных скобок — это может быть «12345», или [12345], или [«12345»]. Для этого простой SUBSTRING неэффективен, поскольку вам нужно определить количество удаляемых символов. В этом случае использование REPLACE , вероятно, будет вашим лучшим выбором:

В этом случае используйте этот код:

 SELECT REPLACE(REPLACE(REPLACE(MyColumnName, '"', ''), ']', ''), '[', '') as FinalValue
  

Ответ №3:

SELECT (replace(replace(replace([fieldName],'[',''),']',''),'"','')) FROM [tableName]