#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:
Если вам нужно удалить квадратные скобки и кавычки из значения в столбце (как показано в вашем вопросе выше), есть несколько методов, которые вы можете использовать. Вот несколько, основанных на разных ситуациях:
- Данные всегда включают символы [» и «]. В этом случае ПОДСТРОКА вернет данные, которые вам нужны быстрее всего:
В этом случае используйте этот код:
-- This simply removes those first two and last two characters.
SELECT SUBSTRING(MyColumnName, 3, Len(MyColumnName) - 4) as FinalValue
- Данные могут содержать любую комбинацию кавычек и квадратных скобок — это может быть «12345», или [12345], или [«12345»]. Для этого простой
SUBSTRING
неэффективен, поскольку вам нужно определить количество удаляемых символов. В этом случае использованиеREPLACE
, вероятно, будет вашим лучшим выбором:
В этом случае используйте этот код:
SELECT REPLACE(REPLACE(REPLACE(MyColumnName, '"', ''), ']', ''), '[', '') as FinalValue
Ответ №3:
SELECT (replace(replace(replace([fieldName],'[',''),']',''),'"','')) FROM [tableName]