разделение строки только на два столбца

#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