SQL: получить первые три символа из значения столбца sql - PullRequest
1 голос
/ 12 апреля 2019

Например: если значение столбца sq равно sa, 123k и выходные данные должны начинаться с трех символов, т. Е. Sak

Буквы и любые специальные символы должны быть исключены и получают только три символа. Как мы это делаем?

Ответы [ 4 ]

5 голосов
/ 12 апреля 2019

Для этой цели вы можете использовать рекурсивные CTE:

with t as (
      select 'sa,123k' as str
     ),
     cte as (
      select str, left(str, 1) as c, stuff(str, 1, 1, '') as rest, 1 as lev,
             convert(varchar(max), (case when left(str, 1) like '[a-zA-Z]' then left(str, 1) else '' end)) as chars
      from t
      union all
      select str, left(rest, 1) as c, stuff(rest, 1, 1, '') as rest, lev + 1,
             convert(varchar(max), (case when left(rest, 1) like '[a-zA-Z]' then chars + left(rest, 1) else chars end))
      from cte
      where rest > '' and len(chars) < 3
     )
select str, max(chars)
from cte
where len(chars) <= 3
group by str;

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

2 голосов
/ 12 апреля 2019

Это может помочь

DECLARE @VAR VARCHAR(100)= 'sa,1235JSKL', @RESULT VARCHAR(MAX)=''

SELECT @RESULT = @RESULT+ 
CASE WHEN  RESULT LIKE '[a-zA-Z]' THEN RESULT ELSE '' END 
FROM (
SELECT NUMBER, SUBSTRING(@VAR,NUMBER,1) AS RESULT
FROM MASTER..spt_values 
WHERE TYPE = 'P' AND NUMBER BETWEEN 1 AND LEN(@VAR)
)A
ORDER BY NUMBER

SELECT SUBSTRING(@RESULT,1,3)

Если вы хотите применить это к столбцу Таблицы, вам нужно создать скалярную функцию с той же логикой.Вы можете найти больше статей о том, как создать скалярную функцию с помощью Googling.

1 голос
/ 12 апреля 2019

Вы можете использовать эту функцию, которая написана G Mastros , чтобы сделать это.

Create Function [dbo].[RemoveNonAlphaCharacters](@Temp nvarchar(MAX))
Returns nvarchar(MAX)
AS
Begin

    Declare @KeepValues as nvarchar(MAX)
    Set @KeepValues = '%[^a-z]%'
    While PatIndex(@KeepValues, @Temp) > 0
        Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')

    Return @Temp
End

Затем просто вызовите функцию следующим образом:

SELECT LEFT(dbo.RemoveNonAlphaCharacters(colName), 3)
FROM TableName

Ссылка: G Mastros ответ на вопрос «Как убрать все не алфавитные символы из строки в SQL Server».

0 голосов
/ 12 апреля 2019

Ну, это ужасно, но вы можете заменить все символы, которые вам не нравятся.

В вашем примере это будет:

SELECT REPLACE (REPLACE (REPLACE (REPLACE ('sa,123k', '1', ''), '2', ''), '3', ''), ',', '')

Очевидно, это требует много замен, если вам нужно заменить все числа и другие виды символов.

Отредактировано, основываясь на вашем комментарии:

SELECT REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE ('123456gh,.!879k', '1', ''), '2', ''), '3', ''), ',', ''), '4', ''), '5', ''), '6', ''), '.', ''), '!', ''), '7', ''), '8', ''), '9', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...