#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть строка с надписью «20 лет в Германии», которую необходимо разделить на два столбца с использованием SQL. Один столбец содержит число 20, а второй столбец содержит строку «годы в Германии».
Я использовал функцию string_split, используя пробел в качестве символа разделения. Однако проблема в том, что в итоге я получаю два значения many из разделения.
declare @message varchar(100) = '20 years in Germany';
select
(
select top 1 [value] from string_split([value], ' ') order by value asc -- get the number 20 in the string
)
My desired result is two columns
------------- ----------------
20 years in Germany
Комментарии:
1. Покажите нам еще несколько примеров данных разных типов, а также ожидаемый результат.
2.
string_split
возвращает строки, а не столбцы. Если вы хотите, чтобы то, что находится перед первым пробелом в одной части, и то, что находится после него в другой части, используйте комбинациюleft
,right
len
иcharindex
.
Ответ №1:
Попробуйте PATINDEX
DECLARE @str VARCHAR(MAX) = '20 years in Germany'
SELECT LEFT(@str, PATINDEX('%[0-9][^0-9]%', @str )) AS Number,
LTRIM(RIGHT(@str, LEN(@str) - PATINDEX('%[0-9][^0-9]%', @str ))) As word
вывод
Number word
20 years in Germany