получить последние значения _ позиции на сервере SQL - PullRequest
0 голосов
/ 05 июня 2018

Привет У меня есть одно сомнение в SQL Server.

, как получить первую позицию справа от конкретной позиции символа.

таблица: empfiles

filename: 
ab_re_uk_u_20101001
ax_by_us_19991001
abc_20181002

Я хочувывод, как показано ниже:

filename 
ab_re_uk_u
ax_by_us
abc

Я пытался, как показано ниже:

select SUBSTRING(filename,1,CHARINDEX('2',filename) - 1)  as filename  from empfiles

Приведенный выше запрос не дал ожидаемого результата, пожалуйста, скажите мне, как написать запрос для выполнения этой задачи на сервере SQL.

Ответы [ 5 ]

0 голосов
/ 05 июня 2018

Попробуйте с этим ..

select [filename],SUBSTRING([filename],1,PATINDEX('%_[0-9]%',[filename])-1) from empfiles

Индивидуальный выбор записей

SELECT SUBSTRING('ab_re_uk_u_20101001',1,PATINDEX('%_[0-9]%','ab_re_uk_u_20101001')-1)

SELECT SUBSTRING('ax_by_us_19991001',1,PATINDEX('%_[0-9]%','ax_by_us_19991001')-1)

SELECT SUBSTRING('abc_20181002',1,PATINDEX('%_[0-9]%','abc_20181002')-1)
0 голосов
/ 05 июня 2018

Ну, очевидно, что последним значением позиции является дата, а формат - ГГГГММДД, поэтому его 8 символов, плюс, добавляются символом подчеркивания, что делает его 9 символом.

Предполагается, что с помощью приведенного выше оператораследующая логика запроса должна работать

SELECT SUBSTRING(ColumnText, 1, LEN(ColumnText) - 9)

Это означает, что отображаются только символы с позиции символа 1 до позиции символа LEN - 9, где LEN - длина символов, а 9 - последние 9цифра удаляемого числа

0 голосов
/ 05 июня 2018

Другой способ - использовать реверс в сочетании с STUFF .

create table f(filename nvarchar(100));
insert into f values
('ab_re_uk_u_20101001')
,('ax_by_us_19991001')
,('abc_20181002');

select 
    filename=reverse(stuff(reverse(filename),1,charindex('_',reverse(filename)),''))
from f
0 голосов
/ 05 июня 2018

Попробуйте

CREATE TABLE #DATA([FILENAME] NVARCHAR(100));
INSERT INTO #DATA VALUES
('ab_re_uk_u_20101001')
,('ax_by_us_19991001')
,('abc_20181002');

SELECT [filename],
       SUBSTRING([filename],0,PATINDEX('%[0-9]%',[filename])-1) AS ExpectedResult 
FROM #Data

Результат

filename                ExpectedResult
--------------------------------------
ab_re_uk_u_20101001     ab_re_uk_u
ax_by_us_19991001       ax_by_us
abc_20181002            abc
0 голосов
/ 05 июня 2018

Если последняя позиция всегда имеет числовые значения, вы можете использовать patindex():

select *, substring(filename, 1, patindex('%[0-9]%', filename)-2) as NewFile
from empfiles e;

Если вы хотите получить символы после _ справа от строки, то вы можете использовать комбо для reverse() и substring()

select *,
      reverse(substring(reverse(filename),charindex('_', reverse(filename))+1, len(filename)))
from empfiles e;
...