1

以下のような値を選択しています。

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@Firefox@dsfsd

このような値をグリッドに表示する代わりに、Firefox のみをグリッドに表示する必要があります。

4

4 に答える 4

1

毎回 2 番目の要素が必要であることがわかっているため、次のような関数を作成できます。


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
于 2012-08-31T07:35:33.233 に答える
0

使用しているSQLServerのバージョンや分割機能は指定しません。ただし、ほとんどの分割関数は行ではなくテーブルを返すため、JOINを使用して2つのテーブルを結合する必要があります(最初は分割、2番目は残りのフィールドです)。

SQL分割関数の詳細については、Erland Sommarskogのページ(http://www.sommarskog.se/arrays-in-sql.html )を参照してください。

于 2012-08-31T05:55:54.330 に答える
0

Split 関数を作成して、必要なときに使用できます。

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,','))
于 2012-08-31T07:19:52.033 に答える
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
于 2012-08-31T09:26:41.257 に答える