2017-09-05 1 views
0

HSQLDBのクエリを探しています。SQL - 複数回出現する "/"を使用して文字列を分割する

"/"で区切られたアドレス情報を含む文字列があります。今私はこの文字列を "/"で分割し、個々のアドレス情報を別の列に挿入する必要があります。

Address = /1234/CLAREVIEW////WILMINGTON/DE/19702 

これは

StreetNo = Address[1] = 1234 
StreetName = Address[2] = CLAREVIEW 
StreetType = Address[3] = 
City = Address[6] = WILMINGTON 
StateCd = Address[7] = DE 
ZipCd = Address[8] = 19702 

どのように私はこれを達成することができますように分割する必要がありますか?

+0

配列に分割するREGEXP_SUBSTRING_ARRAY機能とプロシージャを作成します。次に、INSERT INTO t(StreetNo、StreetName、StreetType ...)VALUES(arr [1]、arr [2]、arr [3]、...) – fredt

+0

@fredt REGEXP_SUBSTRING_ARRAYは一度も使用していません。私は検索しましたが、役に立たないものは見つかりませんでした。 – keanu

答えて

1

配列に分割するREGEXP_SUBSTRING_ARRAY関数とプロシージャを作成します。

REGEXP_SUBSTRING_ARRAY('/1234/CLAREVIEW////WILMINGTON/DE/19702', '/\p{Alnum}*'); 

戻り

ARRAY['/1234','/CLAREVIEW','/','/','/','/WILMINGTON','/DE','/19702'] 

ので、手順が含まれている必要があります

CREATE PROCEDURE INSERT_USING_REGEXP (p1 VARCHAR(500)) 
    BEGIN ATOMIC 
    DECLARE arr VARCHAR(200) ARRAY; 
    SET arr = REGEXP_SUBSTRING_ARRAY(p1,'/\p{Alnum}*'); 
    INSERT INTO thetable ((StreetNo, StreetName, StreetType...) VALUES (arr[1], arr[2], arr[3], ...); 
    END; 

を次に

CALL INSERT_USING_REGEXP('/1234/CLAREVIEW////WILMINGTON/DE/19702'); 
+0

ありがとうございます。これは完璧です。 – keanu

+0

Alnum dintが私のために働くようです。代わりに[a-zA-Z0-9]を使用しました – keanu

+0

正規表現を拡張して数字やアルファベットだけでなく特殊文字を含めることができる方法はありますか – keanu

-1
CREATE TABLE #Results 
    (
    Ordinal NUMERIC, 
    StringValue VARCHAR(MAX) 
    ) 

DECLARE @String VARCHAR(100), 
    @Delimiter VARCHAR(100) 

SET @String = '/1234/CLAREVIEW////WILMINGTON/DE/19702' 
SET @Delimiter = '/' 

DECLARE @TempString VARCHAR(MAX) = @String, 
    @Ordinal INT = 0, 
    @CharIndex INT = 0 

SET @CharIndex = CHARINDEX(@Delimiter, @TempString) 
WHILE @CharIndex != 0 
    BEGIN  
     SET @Ordinal += 1  
     INSERT #Results 
     VALUES (@Ordinal, SUBSTRING(@TempString, 0, @CharIndex))  
     SET @TempString = SUBSTRING(@TempString, @CharIndex + 1, LEN(@TempString) - @CharIndex)  
     SET @CharIndex = CHARINDEX(@Delimiter, @TempString) 
    END 

IF @TempString != '' 
    BEGIN 
     SET @Ordinal += 1 
     INSERT #Results 
     VALUES (@Ordinal, @TempString) 
    END 

SELECT * 
FROM  #Results 

I took this answer from here but it should do the trick

+0

なぜSQL Serverソリューション(T-SQLを使用)がHSQLDBで動作すると思いますか? –

関連する問題