Подтвердить что ты не робот

Получите все после и до определенного символа в SQL Server

В моей базе данных я получил следующую запись:

images/test.jpg

Я хочу обрезать запись, чтобы получить: test

Итак, в основном, я хочу все после / и до .

Как я могу его решить?

4b9b3361

Ответ 1

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

Возможный запрос будет выглядеть следующим образом (где col - это имя столбца, содержащего ваши каталоги изображений:

SELECT SUBSTRING(col, LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) + 1, 
    LEN(col) - LEN(SUBSTRING(col, 0, LEN(col) - CHARINDEX ('/', col))) - LEN(SUBSTRING(
    col, CHARINDEX ('.', col), LEN(col))));

Немного страшного зверя. Это также зависит от стандартного формата 'dir/name.ext'.

Изменить:
Этот (вдохновленный правиной) является более общим и имеет расширения различной длины:

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('/', col))) + 1, LEN(col) - LEN(LEFT(col, 
    CHARINDEX ('/', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('.', col))) - 1);

Ответ 2

используйте следующую функцию

left(@test, charindex('/', @test) - 1)

Ответ 3

Перед

SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster;

После

SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster

Ответ 4

 declare @T table
  (
  Col varchar(20)
  )



  insert into @T 
  Select 'images/test1.jpg'
  union all
  Select 'images/test2.png'
  union all
  Select 'images/test3.jpg'
  union all
  Select 'images/test4.jpeg'
  union all
  Select 'images/test5.jpeg'

 Select substring( LEFT(Col,charindex('.',Col)-1),charindex('/',Col)+1,len(LEFT(Col,charindex('.',Col)-1))-1 )
from @T

Ответ 5

Я просто сделал это в одном из моих отчетов, и это было очень просто.

Попробуйте это:

=MID(Fields!.Value,8,4)

Примечание: это сработало для меня, потому что ценность, которую я пытался получить, была константой, не уверен, что то, что вы пытаетесь получить, также является константой.

Ответ 6

Я сделал метод, который намного более общий:

так:

DECLARE @a NVARCHAR(MAX)='images/test.jpg';


 --Touch here
DECLARE @keysValueToSearch NVARCHAR(4000) = '/'
DECLARE @untilThisCharAppears NVARCHAR(4000) = '.'
DECLARE @keysValueToSearchPattern NVARCHAR(4000) = '%' + @keysValueToSearch + '%'


 --Nothing to touch here     
SELECT SUBSTRING(
           @a,
           PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch),
           CHARINDEX(
               @untilThisCharAppears,
               @a,
               PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch)
           ) -(PATINDEX(@keysValueToSearchPattern, @a) + LEN(@keysValueToSearch))
       )

Ответ 7

Я знаю, что это было какое-то время.. но вот идея

declare @test varchar(25) = 'images/test.jpg'

select
 @test as column_name
 , parsename(replace(@test,'/','.'),1) as jpg
 ,parsename(replace(@test,'/','.'),2) as test
  ,parsename(replace(@test,'/','.'),3) as images

Ответ 8

Ниже запрос дает вам данные перед '-' Ex- W12345A-4S

SELECT SUBSTRING(Column_Name,0, CHARINDEX('-',Column_Name))  as 'new_name'
from [abc].

Выход - W12345A

Ответ 9

Я нашел ответ Ройи Намир полезным, но расширил его, чтобы создать его как функцию. Я переименовал переменные в то, что имело для меня смысл, но при желании вы можете перевести их обратно достаточно легко.

Кроме того, код в ответе Ройи уже обрабатывал случай, когда искомый символ не существует (он начинается с начала строки), но я хотел также обработать случаи, когда искомый символ не существует.

В этом случае он действует аналогичным образом, начиная с искомого символа и возвращая оставшиеся символы в конец строки.

CREATE FUNCTION [dbo].[getValueBetweenTwoStrings](@inputString 
NVARCHAR(4000), @stringToSearchFrom NVARCHAR(4000), @stringToSearchTo 
NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN      
DECLARE @retVal NVARCHAR(4000)
DECLARE @stringToSearchFromSearchPattern NVARCHAR(4000) = '%' + 
@stringToSearchFrom + '%'

SELECT @retVal = SUBSTRING (
       @inputString,
       PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom),
       (CASE
            CHARINDEX(
                @stringToSearchTo,
                @inputString,
                PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
        WHEN
            0
        THEN
            LEN(@inputString) + 1
        ELSE
            CHARINDEX(
                @stringToSearchTo,
                @inputString,
                PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
        END) - (PATINDEX(@stringToSearchFromSearchPattern, @inputString) + LEN(@stringToSearchFrom))
   )
RETURN @retVal
END

Использование:

SELECT dbo.getValueBetweenTwoStrings('images/test.jpg','/','.') AS MyResult

Ответ 10

----select символов до/включая/

select SUBSTRING ('abcde/wxyz',0,CHARINDEX('/','abcde/wxyz')+1)

--select символы после/включая/

select SUBSTRING('abcde/wxyz',CHARINDEX('/','abcde/wxyz'),LEN('abcde/wxyz')) 

Ответ 11

Вы можете попробовать это:

Declare @test varchar(100)='images/test.jpg'
Select REPLACE(RIGHT(@test,charindex('/',reverse(@test))-1),'.jpg','')