我选择的值如下:
select browser, firstname, lastname from details
这里的浏览器值如下:
33243@Firefox@dsfsd
34234@google@dfsd
另外我单独使用了分割函数,如下所示:
select * from dbo.split('33243@Firefox@dsfsd','@')
结果是:
items
===========
33243
firefox
dsfsd
所以我使用了如下的分割功能
select split(browser, '@'), firstname, lastname from details
但它不起作用......
我需要的是
33243 @火狐@ dsfsd
而不是将这样的值显示到网格中, 必须只显示Firefox到网格中。
答案 0 :(得分:1)
既然你知道每次都想要第二个元素,你可以写一个这样的函数:
CREATE FUNCTION [dbo].[fn_SplitElement]
(
@inputString nvarchar(2000), --The input string
@elem int, --The 1-based element index to return,
@delimiter nvarchar(1) --The delimiter char
)
RETURNS nvarchar(2000)
AS
BEGIN
-- Declare the return variable here
DECLARE @result nvarchar(2000)
-- Add the T-SQL statements to compute the return value here
SELECT @result = value
FROM
(
SELECT *,ROW_NUMBER() OVER(ORDER By Position) as rownum FROM dbo.split(@inputString,@delimiter)
) as t
WHERE rownum=@elem
-- Return the result of the function
RETURN @result
END
GO
然后你可以打电话:
select [dbo].[fn_SplitElement](browser,2,'@') as 'BrowserName', firstname, lastname from details
答案 1 :(得分:0)
您没有说明您正在使用哪个版本的SQL Server或哪个拆分功能。但是,大多数split函数返回一个表而不是行,因此您需要使用JOIN来连接两个表(第一个是拆分,第二个是其余字段)。
有关SQL分割函数的更多信息,请参阅http://www.sommarskog.se/arrays-in-sql.html的Erland Sommarskog页面。
答案 2 :(得分:0)
您可以创建一个分割功能,并在需要时使用。
CREATE FUNCTION [dbo].[Split]
(
@List nvarchar(max),
@SplitOn nvarchar(1)
)
RETURNS @RtnValue table (
Id int identity(1,1),
Value nvarchar(max)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End
Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
之后,您可以在查询中调用该函数,如下所示。
SELECT * FROM anotherTable WHERE user_id IN(dbo.split(@user_list,','))
答案 3 :(得分:0)
我使用了以下查询而不是使用拆分功能..它工作得很好..
select
SUBSTRING(SUBSTRING(browser, CHARINDEX ('@', browser)+1,LEN(browser)-charindex('@', browser)),
0,
CHARINDEX('@',SUBSTRING(browser, CHARINDEX ('@', browser)+1,LEN(browser)-CHARINDEX('@', browser)))),
firstname, lastname from details