6

このようなエントリを持つテーブルがあります。

    MachineName
-----------------------

    Ab bb zecos
    a zeng
    zeng
    empty

テーブルに 4 行。

これらの4行を分離して出力を取得するにはどうすればよいですか。

       M1       M2       M3
-----------------------------------
       Ab       bb      zecos
       a        zeng     NULL
       zeng     NULL     NULL
       NULL     NULL     NULL
4

5 に答える 5

2

これを試してください:

    CREATE FUNCTION [dbo].[SplitIndex](@Delimiter varchar(20) = ' ', @Search varchar(max), @index int)
    RETURNS varchar(max)
    AS
    BEGIN
          DECLARE @ix int,
                      @pos int,
                    @rt varchar(max)

          DECLARE @tb TABLE (Val varchar(max), id int identity(1,1))

          SET @ix = 1
          SET @pos = 1


          WHILE @ix <= LEN(@search) + 1 BEGIN

                SET @ix = CHARINDEX(@Delimiter, @Search, @ix)

                IF @ix = 0
                      SET @ix = LEN(@Search)
                ELSE
                      SET @ix = @ix - 1

                INSERT INTO @tb
                SELECT SUBSTRING(@Search, @pos, @ix - @pos + 1)

                SET @ix = @ix + 2
                SET @pos = @ix
          END

          SELECT @Rt = Val FROM @Tb WHERE id = @index
          RETURN @Rt     
    END

次のように使用します。

SELECT dbo.SplitIndex(' ', 'hello World', 1)

それを民主党の回答と組み合わせると、準備が整います

(指定されたインデックスが存在しない場合は NULL を返すことに注意してください)

例えば

SELECT dbo.SplitIndex(' ', 'Hello World', 3)  

インデックス 3 が存在しないため、NULL を返します。

ただし、パフォーマンスがどのようなものかはわかりませんが、行ったテーブル値分割関数を変更しただけなので、MySql バージョンのように書き直す価値があるかもしれません

于 2012-06-25T08:49:32.627 に答える
2
DECLARE @Tmp TABLE (empid INT,joined nchar(10))

INSERT @Tmp SELECT 1,'1990, 1111' 
INSERT @Tmp SELECT 2,'2000, 2222' 

INSERT @Tmp SELECT 3,'1993, 3333' 

INSERT @Tmp SELECT 4,'1899, 4444' 
INSERT @Tmp SELECT 5,'1999, 5555' 

INSERT @Tmp SELECT 6,'2001, 6666 ' 


--Using PARSENAME 

SELECT empid, joined,
       PARSENAME(REPLACE(joined,',','.'),2) join1, 
       PARSENAME(REPLACE(joined,',','.'),1) join2 
FROM @Tmp
于 2017-02-15T11:16:15.217 に答える
-6

C++ でプログラミングしている場合は、次のようにしてください。

#include <cstring>
#include <iomanip>

using namespace std;
int main () {
string machine[12];
for (int i = 0; i < 12; i++) {
    if (machine[i] == "")
        machine[i] = "NULL";
}

for (int i = 0; i < 3; i++) {
    cout << setw(10) << machine[i] << setw(10) << machine[i+1] << setw(10) << machine[i+2] << endl;
}
return 1;
}
于 2012-06-25T08:15:32.883 に答える