특수문자 - sql like_




SQL Server의 특정 문자 전후 모든 것을 가져옵니다. (6)

내 데이터베이스에 다음 항목이 있습니다.

images/test.jpg

그래서 항목을 다듬어서 얻고 싶습니다 : test

근본적으로, 나는 모든 것을 / 전에와 후에 원합니다 .

어떻게 해결할 수 있습니까?


SQL을 사용하여 테이블에서 이것을 가져 오려면 SUBSTRINGCHARINDEX 와 같은 다음 함수를 살펴 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'의 표준 형식에 따라 다릅니다.

편집하다:
이것은 ( praveen 의해 영감을 praveen )이 더 일반적이고 다른 길이의 확장을 다룹니다.

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

나는 의 대답이 유용하다는 것을 만 그것을 함수로 만들기 위해 확장했다. 변수 이름을 나에게 의미가있는 것으로 바꾸었지만 원할 경우 쉽게 다시 번역 할 수 있습니다.

또한 Royi의 답변에있는 코드는 이미 검색중인 문자가 존재하지 않는 경우 (문자열 시작 부분부터 시작)에 처리했지만 검색 대상 문자가 존재하지 않는 경우도 처리하려고했습니다.

이 경우 문자에서 검색하여 나머지 문자를 문자열 끝에 반환하여 비슷한 방식으로 작동합니다.

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

나는 이것이 잠시 동안 있었다는 것을 안다. 그러나 여기에 아이디어가있다.

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

나는 훨씬 더 일반적인 방법을 만들었습니다.

그래서 :

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))
       )

아래 쿼리는 '-'이전의 데이터를 제공합니다. 예 - W12345A-4S

SELECT [SUBSTRING (Column_Name, 0, CHARINDEX ( '-', Column_Name))은 [abc]의 'new_name'입니다.

출력 - W12345A


전에

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

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




sql-server