SQL Server: получить последние 4 символа в первом столбце и получить первую букву слов во 2-м столбце, но игнорировать не алфавиты - PullRequest
0 голосов
/ 08 декабря 2018

Можно ли проверить, можно ли запустить SQL с этим требованием?Я пытаюсь получить новое значение для нового столбца из этих 2 существующих столбцов ID и Description.

  • Для ID, просто получить последние 4 символа
  • Для Description, хотел бы получить первые алфавиты для каждого слова, но игнорировать цифры и символы.

sample data

output data for this new column

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

SQL Server имеет паршивые возможности обработки строк.Даже split_string() не сохраняет порядок слов, которые он находит.

Один из подходов к этому - использование рекурсивного CTE для разделения строк и накопления инициалов:

with t as (
      select v.*
      from (values (2004120, 'soccer field 2010'), (2004121, 'ruby field')) v(id, description)
     ),
     cte as (
      select id, description, convert(varchar(max), left(description, charindex(' ', description + ' '))) as word,
             convert(varchar(max), stuff(description, 1, charindex(' ', description + ' ') , '')) as rest,
             1 as lev,
             (case when description like '[a-zA-Z]%' then convert(varchar(max), left(description, 1)) else '' end) as inits
      from t
      union all
      select id, description, convert(varchar(max), left(rest, charindex(' ', rest + ' '))) as word,
             convert(varchar(max), stuff(rest, 1, charindex(' ', rest + ' ') , '')) as rest,
             lev + 1,
             (case when rest like '[a-zA-Z]%' then convert(varchar(max), inits + left(rest, 1)) else inits end) as inits
      from cte
      where rest > ''
     )
select id, description, inits + right(id, 4)
from (select cte.*, max(lev) over (partition by id) as max_lev
      from cte
     ) cte
where lev = max_lev;

Здесь - это дБ <> скрипка.

0 голосов
/ 08 декабря 2018

Чтобы получить последние 4 цифры идентификатора, который вы могли бы использовать:

SELECT Id%10000 as New_Id from Tablename;

Чтобы получить начало каждого слова, которое вы можете использовать (позволяя получить ответ String2):

LEFT(Description,1) 

Это эквивалентно использованию SUBSTRING(Description,1,1). Это поможет вам получить первую букву каждого слова.

Чтобы объединить их оба, вы можете использовать функцию CONCAT:

SELECT CONCAT(String2,New_Id)

Подробнее о функции CONCAT см. Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...