1

SQL サーバーで文字列を分割し、データをテーブルに挿入する必要があります。文字列は固定長で、カンマ区切りではありません。文字列には、挿入する 1 つ以上のレコードを含めることができます。次に例を示します。

id = 2 文字 name = 4 文字

文字列: 01AAAA02BBBB03CCCC.

この例では、挿入するレコードが 3 つあります (文字列には 1 つまたは複数のレコードしか含めることができません)。

ID 名前 01 AAAA 02 BBBB 03 CCCC

この情報を 2 つの異なる列と 3 つの異なる行に分割する方法が必要です。BCP ユーティリティを使用することを考えていましたが、ファイルを分割して生成してから BCP を使用する必要があるかもしれません。

何か案が?

4

2 に答える 2

4

文字列は常に固定長であるため、次のように実行できます。

DECLARE @s VARCHAR(50) = '01AAAA02BBBB03CCCC';

SELECT *
FROM
(
    SELECT SUBSTRING(@s, 01, 2) AS ID,  SUBSTRING(@s, 3, 4) AS Name
    UNION ALL
    SELECT SUBSTRING(@s, 7, 2) AS ID,  SUBSTRING(@s, 9, 4) AS Name
    UNION ALL
    SELECT SUBSTRING(@s, 13, 2) AS ID,  SUBSTRING(@s, 15, 4) AS Name
) t;

これはあなたに与えるでしょう:

ID  Name
01  AAAA
02  BBBB
03  CCCC

更新:テーブルの列からこの文字列を取得する場合は、次のように実行できます。

DECLARE @t table(name varchar(50));
INSERT INTO @t VALUES
('01AAAA02BBBB03CCCC'),
('01DDDD02BBBB03CCCC'),
('01HHHH02QQQQ03CCCC'),
('01IIII02MMMM03CCCC');

SELECT *
FROM
(
    SELECT SUBSTRING(name, 1, 2) AS ID,  SUBSTRING(name, 3, 4) AS Name
    FROM @t
    UNION ALL
    SELECT SUBSTRING(name, 7, 2) AS ID,  SUBSTRING(name, 9, 4) AS Name
    FROM @t
    UNION ALL
    SELECT SUBSTRING(name, 13, 2) AS ID,  SUBSTRING(name, 15, 4) AS Name
    FROM @t
) t;

これにより、次のようになります。

ID  Name
01  AAAA
01  DDDD
01  HHHH
01  IIII
02  BBBB
02  BBBB
02  QQQQ
02  MMMM
03  CCCC
03  CCCC
03  CCCC
03  CCCC
于 2012-09-26T15:05:23.893 に答える
2

以下は、3 つ以上の id/name ペアを処理します。ただし、エラー チェックは行われないことに注意してください。私はそれをあなたに任せます。

DECLARE @Input NVARCHAR(18)
SET @Input = '01AAAA02BBBB03CCCC'

DECLARE @Data TABLE 
(
    [Id] NCHAR(2),
    [Name] NCHAR(4)
)

WHILE LEN(@Input) > 0
BEGIN

    DECLARE @CurrentData NCHAR(6)
    SET @CurrentData = LEFT(@Input, 6)  

    DECLARE @CurrentId NCHAR(2)
    SET @CurrentId = LEFT(@CurrentData, 2)  

    DECLARE @CurrentName NCHAR(4)
    SET @CurrentName = RIGHT(@CurrentData, 4)   

    INSERT INTO @Data
    (
        [Id],
        [Name]
    )
    SELECT
        @CurrentId,
        @CurrentName

    SET @Input = RIGHT(@Input, LEN(@Input) - 6)

END

SELECT 
    [Id],
    [Name]
FROM
    @Data
于 2012-09-26T15:13:16.647 に答える