2016-11-25 217 views
2

我目前使用下面列出的函數來查找2個字符串之間的文本,我的問題是沒有找到任何東西,它只是返回一個錯誤,我不會返回一個空格或空值,任何人都可以提供任何請提供關於如何改變它的建議。?2字符串之間的字符串

CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256) 
) 
RETURNS VARCHAR(max) 
AS 
BEGIN 

    DECLARE @FirstPosition int, @SecondPosition int 
    SET @FirstPosition = CHARINDEX(@FirstString,@String) + LEN(@FirstString) 
    SET @SecondPosition = CHARINDEX(@SecondString,@String) 
    RETURN (SELECT SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition)) 

END 
+0

什麼是你的輸入參數和你有什麼期望的輸出 – Mansoor

+0

曼蘇爾嗨,我已經重新檢查功能,我很遺憾,當我最初創建它引起了我原來的問題沒有正確保存它。雖然這已經解決了我原來的問題,但我認爲我會進一步調查它。例如,我的函數調用的內容類似於select dbo.udf_GetStringBetween2Strings('','',''),因爲您可以看到我要查找的第一件事是字符串,此返回't_customer_id>我真的很想在第一個字符串不存在的時候找到'Not Found'。 – PJD

+0

您是否檢查了我的下面的查詢。是否適合您的預期結果..? – Mansoor

回答

0

最直接的方法是檢查CHARINDEX的結果(它返回一個0時,沒有找到匹配)。例如

DECLARE @FirstPosition int, @SecondPosition int 
SET @FirstPosition = CHARINDEX(@FirstString,@String) 
if @FirstPosition = 0 return 'Not found' 
set @FirstPosition += LEN(@FirstString) 
SET @SecondPosition = CHARINDEX(@SecondString,@String, @FirstPosition) 
if @SecondPosition = 0 return 'Not found' 
return SUBSTRING(@String, @FirstPosition, @SecondPosition - @FirstPosition) 
+0

感謝您的迴應,這是有效的,當其中一個參數丟失,但是當他們都沒有選擇它們之間的東西時,它只是返回Not Found – PJD

+0

剛剛測試過它,它似乎工作,但是當粘貼一個示例並從SO,它沒有。它可能是整理或一些隱藏的字符。你可以嘗試一個新的(非粘貼)的例子嗎? –

+0

感謝您的回覆,我剛剛嘗試從頭開始輸入整個函數,但仍然遇到了相同的問題。 – PJD

0

嘗試這個

CREATE FUNCTION [dbo].[udf_GetStringBetween2Strings] 
(
    @String varchar(max), 
    @FirstString varchar(256), 
    @SecondString varchar(256) 
) 
RETURNS VARCHAR(max) 
AS 
BEGIN 

    DECLARE @FirstSplit VARCHAR(100),@SecondSplit VARCHAR(100),@ReturnStr VARCHAR(100) 
    SET @FirstSplit = SUBSTRING(@String,0,CHARINDEX(' ',@String)) 
    SET @String = SUBSTRING(@String,CHARINDEX(' ',@String)+1,LEN(@String)) 
    SET @SecondSplit = @String 

    IF @FirstSplit = @FirstString 
     SET @ReturnStr = @FirstSplit 
    ELSE IF @SecondSplit = REPLACE(@SecondString,'?','') 
     SET @ReturnStr = @SecondSplit 
    ELSE 
     SET @ReturnStr = 'Not Found' RETURN @ReturnStr END 
+0

嗨Mansoor,對不起,延遲,我試了你的代碼,我的例子和我發佈在這裏,我回來了「','')「,我回來」在這裏我應該看到1,我會晚將此轉換爲十進制值,但由於當前的結果,我得到轉換數據類型的錯誤varchar到numeric,這是我期望的錯誤,因爲當前的返回結果。感謝您的幫助 – PJD

+0

我編輯了我的查詢。與empty.Now現場檢查我成功了把用於匹配的情況下,和「未找到」無與倫比的字符串 – Mansoor

+0

曼蘇爾嗨,我仍然得到同樣的返回值作爲之前恐怕結果。 – PJD

相關問題