В моей базе данных я получил следующую запись:
images/test.jpg
Я хочу обрезать запись, чтобы получить: test
Итак, в основном, я хочу все после /
и до .
Как я могу его решить?
В моей базе данных я получил следующую запись:
images/test.jpg
Я хочу обрезать запись, чтобы получить: test
Итак, в основном, я хочу все после /
и до .
Как я могу его решить?
Если вы хотите извлечь это из своей таблицы с помощью 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);
используйте следующую функцию
left(@test, charindex('/', @test) - 1)
Перед
SELECT SUBSTRING(ParentBGBU,0,CHARINDEX('/',ParentBGBU,0)) FROM dbo.tblHCMMaster;
После
SELECT SUBSTRING(ParentBGBU,CHARINDEX('-',ParentBGBU)+1,LEN(ParentBGBU)) FROM dbo.tblHCMMaster
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
Я просто сделал это в одном из моих отчетов, и это было очень просто.
Попробуйте это:
=MID(Fields!.Value,8,4)
Примечание: это сработало для меня, потому что ценность, которую я пытался получить, была константой, не уверен, что то, что вы пытаетесь получить, также является константой.
Я сделал метод, который намного более общий:
так:
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))
)
Я знаю, что это было какое-то время.. но вот идея
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
Ниже запрос дает вам данные перед '-' Ex- W12345A-4S
SELECT SUBSTRING(Column_Name,0, CHARINDEX('-',Column_Name)) as 'new_name'
from [abc].
Выход - W12345A
Я нашел ответ Ройи Намир полезным, но расширил его, чтобы создать его как функцию. Я переименовал переменные в то, что имело для меня смысл, но при желании вы можете перевести их обратно достаточно легко.
Кроме того, код в ответе Ройи уже обрабатывал случай, когда искомый символ не существует (он начинается с начала строки), но я хотел также обработать случаи, когда искомый символ не существует.
В этом случае он действует аналогичным образом, начиная с искомого символа и возвращая оставшиеся символы в конец строки.
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
----select символов до/включая/
select SUBSTRING ('abcde/wxyz',0,CHARINDEX('/','abcde/wxyz')+1)
--select символы после/включая/
select SUBSTRING('abcde/wxyz',CHARINDEX('/','abcde/wxyz'),LEN('abcde/wxyz'))
Вы можете попробовать это:
Declare @test varchar(100)='images/test.jpg'
Select REPLACE(RIGHT(@test,charindex('/',reverse(@test))-1),'.jpg','')