-1

特定の文字列に次の文字が存在することを確認する必要があります。

characters =('N', 'E', 'M', 'H', 'T', 'V', 'L', 'C' )
string = 2449.555N06704.2855EM0701H071T44.098V11.764L0.372C1

文字列にこれらの文字が含まれている場合は、次のように値に分割してに挿入する必要がありますdetails_Tb

N = 2449.7183 
E = 06704.2855 
T = 0701
H = 071
T = 44.098
V = 11.764
L = 0.372
C =  1

これに対する解決策はありますか?

4

1 に答える 1

3

この結果を求めるなら

結果:

N=2449.555
E=06704.2855
H=0701
T=071
V=44.098
L=11.764
C=0.372

次に、このクエリを試してください..

DECLARE @CHARACTERS TABLE (CHARS CHAR(1)) 
INSERT INTO @CHARACTERS VALUES
('N'), ('E'), ('M'), ('H'), ('T'), ('V'), ('L'), ('C' );
DECLARE @STRING VARCHAR(500);
SET @STRING= '2449.555N06704.2855EM0701H071T44.098V11.764L0.372C1';

WITH CTE AS (
SELECT      CHARS+'='+CAST(REVERSE(LEFT(REVERSE(LEFT(@STRING,
            CHARINDEX(CHARS,@STRING,1)-1)), PATINDEX('%[^0-9,.]%',
            REVERSE(LEFT(@STRING,CHARINDEX(CHARS,@STRING,1)-1)) + 'Z')-1))
            AS VARCHAR(50)) AS RESULT
FROM        @CHARACTERS )
SELECT * FROM CTE WHERE LEN(RESULT)>2


EDIT1: コメントに従って、これらの値をdetail_Tbテーブルに挿入する場合は、以下のコードを確認してください:

create table detail_Tb(N float,E float,M float,
            H float,T float,V float,L float,C float);

DECLARE @CHARACTERS TABLE (CHARS CHAR(1)) 
INSERT INTO @CHARACTERS VALUES
('N'), ('E'), ('M'), ('H'), ('T'), ('V'), ('L'), ('C' );
DECLARE @STRING VARCHAR(500);
SET @STRING= '2449.555N06704.2855EM0701H071T44.098V11.764L0.372C1';
DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

;WITH CTE AS (
SELECT      CHARS,CAST(REVERSE(LEFT(REVERSE(LEFT(@STRING,
            CHARINDEX(CHARS,@STRING,1)-1)), PATINDEX('%[^0-9,.]%',
            REVERSE(LEFT(@STRING,CHARINDEX(CHARS,@STRING,1)-1)) + 'Z')-1))
            AS VARCHAR(50)) AS RESULT
FROM        @CHARACTERS )
SELECT * into #tmp FROM CTE WHERE len(RESULT)>2  


select @cols = STUFF((SELECT distinct ',' + QUOTENAME(CHARS) 
                    from #tmp
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'Insert into detail_Tb('+@cols+') 
              SELECT ' + @cols + ' from #tmp x
            pivot 
            (
                MAX([RESULT])
                for CHARS in (' + @cols + ')
            ) p '
execute(@query)     
Drop table #tmp
于 2012-09-27T05:56:37.873 に答える