0
A
回答
1
你可以使用charindex和substring。例如,要搜索的「巴茲」的值:
declare @str varchar(128)
set @str = 'foo=abc;bar=def;baz=ghi'
-- Make sure @str starts and ends with a ;
set @str = ';' + @str + ';'
select substring(@str,
charindex(';baz=',@str) + len(';baz='),
charindex('=',@str,charindex(';baz=',@str)) - charindex(';baz=',@str) - 1)
或者在字符串的開始,「富」的價值:
select substring(@str,
charindex(';foo=',@str) + len(';foo='),
charindex('=',@str,charindex(';foo=',@str)) - charindex(';foo=',@str) - 1)
這裏的UDF做到這一點(更通過BlackTigerX的回答啓發閱讀的版本):
create function dbo.FindValueInString(
@search varchar(256),
@name varchar(30))
returns varchar(30)
as
begin
declare @name_start int
declare @name_length int
declare @value_start int
declare @value_end int
set @search = ';' + @search
set @name_start = charindex(';' + @name + '=',@search)
if @name_start = 0
return NULL
set @name_length = len(';' + @name + '=')
set @value_start = @name_start + @name_length
set @value_end = charindex(';', @search, @value_start)
return substring(@search, @value_start, @value_end - @value_start)
end
正如你可以看到,這是不容易在SQL服務器:)更好地做到這一點的客戶端語言,或標準化數據庫中,以便在子在自己的列去。
0
查看PATINDEX函數。它有通配符匹配,這應該可以幫助你...
0
您可以使用此功能
alter function FindValue(@txt varchar(200), @find varchar(200))
returns varchar(200)
as
begin
declare
@firstPos int,
@lastPos int
select @firstPos = charindex(@find, @txt), @lastPos = charindex(';', @txt, @firstPos+5)
select @lastPos = len(@txt)+1 where @lastPos = 0
return substring(@txt, @firstPos+len(@find)+1, @[email protected](@find)-1)
end
select dbo.FindValue('foo=abc;bar=def;baz=ghi', 'bar')
更新:未使用的@find
1
我有這個問題工作的廣義解長度:
CREATE FUNCTION [dbo].[fn_StringBetween]
(
@BaseString varchar(max),
@StringDelim1 varchar(max),
@StringDelim2 varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
DECLARE @at1 int
DECLARE @at2 int
DECLARE @rtrn varchar(max)
SET @at1 = CHARINDEX(@StringDelim1, @BaseString)
IF @at1 > 0
BEGIN
SET @rtrn = SUBSTRING(@BaseString, @at1
+ LEN(@StringDelim1), LEN(@BaseString) - @at1)
SET @at2 = CHARINDEX(@StringDelim2, @rtrn)
IF @at2 > 0
SET @rtrn = LEFT(@rtrn, @at2 - 1)
END
RETURN @rtrn
END
所以如果你運行(只是用你的原始字符串包裹起始和結尾處的';'):
PRINT dbo.fn_StringBetween(';foo=abc;bar=def;baz=ghi;', ';bar=', ';')
你會得到'def'返回。
0
這是假設該字符串將具有相同的字符串格式只是爲了代替列名「富= ABC;巴= DEF;巴茲= GHI」
select substring('foo=abc;bar=def;baz=ghi',patindex('%bar=%','foo=abc;bar=def;baz=ghi')+4, len('foo=abc;bar=def;baz=ghi')-patindex('%;baz=%','foo=abc;bar=def;baz=ghi')-4)
-1
這可以簡單的方式
實現DECLARE @str VARCHAR(30)
DECLARE @start INT
SET @str='foo=abc;bar=def;baz=ghi'
SET @start=CHARINDEX('bar',@str)
PRINT SUBSTRING(@str,@start,3)
相關問題
- 1. TransactSQL運行另一個TransactSQL腳本
- 2. 查找使用
- 3. 查找使用
- 4. 查找使用JavaScript
- 5. 查找使用SQL
- 6. 查找使用NDepend
- 7. 查找使用GTK
- 8. 查找使用EWS
- 9. 查找使用XPath
- 10. 使用$查找在
- 11. 查找使用HQL
- 12. 查找使用DOM
- 13. 使用$ sort查找$
- 14. 查找使用jQuery
- 15. 查找使用JavaScript
- 16. 查找使用SQL
- 17. 查找,使用R
- 18. 查找使用Ruby
- 19. 查找使用jQuery
- 20. 查找使用grep
- 21. 查找使用ColdFusion
- 22. 查找使用LINQ
- 23. 查找使用LINQ
- 24. 查找使用python
- 25. 查找使用jQuery
- 26. 查找使用JAVA
- 27. 使用jQuery查找
- 28. 查找使用XPath
- 29. 查找使用python
- 30. 查找使用Python
是字符串的行值或傳入的東西? – Josh 2009-06-17 18:38:32
你有沒有在數據庫模式的發言?存儲這樣的值違背了SQL數據庫應該如何工作。 – 2009-06-17 18:38:40