在這個Question可接受的解決方案使用bitwise XOR
在PHP
中找到兩個字符串的第一個不同的Charindex。如何在SQL查詢中實現此解決方案還是有更好的解決方案來解決這個問題?找到兩個字符串之間不同的第一個字符位置
3
A
回答
0
我不相信存在與您引用的SQL Server問題中顯示的任何方法的等效方法。
的唯一途徑似乎是通過串手動行走(根據PHP的建議),但在SQL它更費力,由於這樣的事實,就好像它們是數組不能滿足CHAR
類型:
DECLARE @A NVARCHAR(50)
DECLARE @B NVARCHAR(50)
DECLARE @I INT
DECLARE @Pos INT
SET @A = 'Hello World!'
SET @B = 'Hella World!'
SET @I = 0
SET @Pos = 0
-- Loop through each character
WHILE (@I < LEN(@A) AND @I < LEN(@B) AND @Pos = 0)
BEGIN
-- See if the characters at this position differ
IF (SUBSTRING(@A, @I, 1) != SUBSTRING(@B, @I, 1))
SET @Pos = @I
SET @I = @I + 1
END
IF (@Pos > 0)
PRINT 'Difference at position ' + CAST(@Pos AS VARCHAR) + ' A:' + SUBSTRING(@A, @Pos, 1) + ' B:' + SUBSTRING(@B, @Pos, 1)
ELSE
PRINT 'Strings are the same'
運行此按照上面會產生以下的輸出:
Difference at position 5 A:o B:a
注意,如果你經常使用它,你可以把它放到UDF爲簡單起見,另外我還沒有列入檢查NULL
值。
1
更新:下面的SQL XOR解決方案:
只爲字符串LEN字母比8
DECLARE @A VARCHAR(50)
DECLARE @B VARCHAR(50)
DECLARE @Pos INT
set @A='[email protected]'
set @B='ABrC1234'
SET @Pos=(select
case
when len(@A)<>LEN(@B) then -1
when @[email protected] then 0
ELSE 1+PATINDEX('%[1-9]%',
CONVERT(varchar(max),cast(cast(CAST(@A AS varbinary) as BIGINT)^
cast(CAST(@B AS varbinary) as BIGINT)
as varbinary),2))/2
end)
Print @Pos
你可以用一點好的結果與此:
create FUNCTION [dbo].[fnFirstPosDif]
(
@Word as Nvarchar(70),
@Word2 as Nvarchar(70)
)
RETURNS INT
AS
BEGIN
declare @Strings2 TABLE
(
FirstPosDif INT
)
declare @FirstPosDif as int
;with C as
(
select @Word as Word,@Word2 as Word2 ,0 as Iteration
union all
select cast(substring(@Word,Iteration+1,1)as Nvarchar(70)) as Word,cast(substring(@Word2,Iteration+1,1)as Nvarchar(70)) as Word2,Iteration + 1 from C
WHERE Iteration < len(@Word) and cast(substring(@Word,Iteration+1,1)as Nvarchar(70))=cast(substring(@Word2,Iteration+1,1)as Nvarchar(70))
)
insert into @Strings2(FirstPosDif) select MAX(Iteration) as FirstPosDif from C
set @FirstPosDif=(select top 1 FirstPosDif from @Strings2)
return @FirstPosDif
END
相關問題
- 1. 找到兩個字符串之間的字符串的文件
- 2. 如何找到兩個字符串之間的子字符串?
- 3. Swift - 在字符串中的兩個位置之間查找子字符串
- 4. 查找字符串的第一個字符的位置
- 5. 如何查找兩個字符串之間的第二個字符串
- 6. 如何找到兩個「/」字符之間的字符串 - php
- 7. 查找兩個字符串之間的差異位置
- 8. 如何在兩個子串之間找到一個字符串?
- 9. PowerShell - 取代兩個不同的字符之間的字符串
- 10. PhP查找(並替換)兩個不同字符串之間的字符串
- 11. 提取兩個字符串之間不同的字符
- 12. 兩個字符串之間不同的行提取字符
- 13. vb.net查找兩個字符串之間的字符串
- 14. 查找兩個字符串之間的所有子字符串
- 15. 兩個字符串之間
- 16. 找到一個字符在字符串中的位置?
- 17. Scheme:如何找到一個字符串中的字符位置
- 18. 替換位於兩個位置之間的子字符串
- 19. sed - 用另一個字符串替換兩個字符串之間的字符
- 20. 如何找到兩個位置其中之一是在一個字符串
- 21. 查找兩個字符串之間的額外字符
- 22. 查找兩個已知字符之間的未知字符串
- 23. 查找兩個字符之間的子字符串
- 24. 找到一個字符串的位置在另一個字符串
- 25. 查找字符串中第一個字母的位置
- 26. 如何找到兩個特定字符串之間的數字?
- 27. 如何得到一個字符串兩個相同的字符之間的字符串 - 在vb.net
- 28. string.gmatch找到兩個不等號之間包含的字符串
- 29. 如何找到字符串中的兩個字符之間的多個值 - JS
- 30. 匹配兩個相同字符之間的字符串
儘管它可以在T-SQL中完成(至少有4種我能想到的方式),但是沒有使用SQL的有效方法。如果你需要在SQL Server中完成它,那麼你最好的辦法是編寫一個SQLCLR函數。 – RBarryYoung