SQL을 사용하여 마지막으로 나타나는 문자열의 색인을 찾는 간단한 방법이 있습니까? 지금 SQL Server 2000을 사용하고 있습니다. 기본적으로 .NET System.String.LastIndexOf
메서드가 제공 하는 기능이 필요 합니다. 약간의 인터넷 검색에서 이것을 보여주었습니다- 마지막 색인을 검색하는 기능 – “텍스트”열 표현식을 전달하면 작동하지 않습니다. 다른 곳에서 찾은 다른 솔루션은 검색하는 텍스트가 1 자 길이 인 경우에만 작동합니다.
아마도 기능을 요리해야 할 것입니다. 그렇게하면 여기에 게시하여 여러분이보고 사용하도록하겠습니다.
답변
텍스트 데이터 유형에 대한 작은 기능 목록으로 제한됩니다 .
내가 제안 할 수있는 것은로 시작 PATINDEX
하지만 DATALENGTH-1, DATALENGTH-2, DATALENGTH-3
결과를 얻거나 0으로 끝날 때까지 등에서 뒤로 작동합니다 (DATALENGTH-DATALENGTH)
이것은 실제로 SQL Server 2000
처리 할 수없는 것입니다 .
다른 답변 편집 : REVERSE는 SQL Server 2000의 텍스트 데이터와 함께 사용할 수있는 함수 목록에 없습니다.
답변
간단한 방법? 아니요, 그러나 나는 그 반대를 사용했습니다. 말 그대로.
이전의 루틴에서 주어진 문자열의 마지막 발생을 찾기 위해 REVERSE () 함수, CHARINDEX, REVERSE를 차례로 사용하여 원래 순서를 복원했습니다. 예를 들어 :
SELECT
mf.name
,mf.physical_name
,reverse(left(reverse(physical_name), charindex('\', reverse(physical_name)) -1))
from sys.master_files mf
하위 폴더에 얼마나 깊이 중첩되어 있는지에 관계없이 “실제 이름”에서 실제 데이터베이스 파일 이름을 추출하는 방법을 보여줍니다. 이것은 하나의 문자 (백 슬래시) 만 검색하지만 더 긴 검색 문자열을 위해이를 작성할 수 있습니다.
유일한 단점은 이것이 TEXT 데이터 유형에서 얼마나 잘 작동하는지 모르겠습니다. 나는 몇 년 동안 SQL 2005를 사용해 왔으며 더 이상 TEXT 작업에 익숙하지 않지만 왼쪽과 오른쪽을 사용할 수 있다고 생각합니다.
필립
답변
가장 간단한 방법은 …
REVERSE(SUBSTRING(REVERSE([field]),0,CHARINDEX('[expr]',REVERSE([field]))))
답변
Sqlserver 2005 이상을 사용하는 경우 REVERSE
함수를 여러 번 사용 하면 성능이 저하되므로 아래 코드가 더 효율적입니다.
DECLARE @FilePath VARCHAR(50) = 'My\Super\Long\String\With\Long\Words'
DECLARE @FindChar VARCHAR(1) = '\'
-- Shows text before last slash
SELECT LEFT(@FilePath, LEN(@FilePath) - CHARINDEX(@FindChar,REVERSE(@FilePath))) AS Before
-- Shows text after last slash
SELECT RIGHT(@FilePath, CHARINDEX(@FindChar,REVERSE(@FilePath))-1) AS After
-- Shows the position of the last slash
SELECT LEN(@FilePath) - CHARINDEX(@FindChar,REVERSE(@FilePath)) AS LastOccuredAt
답변
DECLARE @FilePath VARCHAR(50) = 'My\Super\Long\String\With\Long\Words'
DECLARE @FindChar VARCHAR(1) = '\'
SELECT LEN(@FilePath) - CHARINDEX(@FindChar,REVERSE(@FilePath)) AS LastOccuredAt
답변
오래되었지만 여전히 유효한 질문이므로 여기에 다른 사람들이 제공 한 정보를 기반으로 만든 내용이 있습니다.
create function fnLastIndexOf(@text varChar(max),@char varchar(1))
returns int
as
begin
return len(@text) - charindex(@char, reverse(@text)) -1
end
답변
이것은 나를 위해 아주 잘 작동했습니다.
REVERSE(SUBSTRING(REVERSE([field]), CHARINDEX(REVERSE('[expr]'), REVERSE([field])) + DATALENGTH('[expr]'), DATALENGTH([field])))
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)