テーブルを結合するためのワイルドカードの処理複数のテーブルを結合する必要がありますが、結合する必要がある列には、テーブルの列の 1 つにワイルドカードが含まれています。 テーブルはそれほど大きくないため、それほど効率的である必要はありません。
以下の Table1 KEY 列では、疑問符の位置に任意の 1 つの英数字を入れることができます。 括弧内は OR ステートメントなので、1、2、3、4 のいずれかになります。
たとえば、ワイルドカードが一致するため、Table2 の行 1 と行 2 に結合する必要があります。 ただし、行 3 には 9 があり、OR パターンには 1|2|3|4 しかありません。
疑問符がある英数字の可能な組み合わせごとに行を複製し、OR 括弧内の各組み合わせで結合が機能することを考えていましたが、これを行う方法がわかりません。
表1
| 鍵 | データ |
| ABC?Y?[1|2|3|4]Z | 99999 |
表2
| 鍵 | 日付 |
| ABC1YA1Z | 2019/08/14 午後 10:10:10 |
| ABCZYB4Z | 2019/08/14 11:11:11 午後 |
| ABC1YA9Z | 2019/08/14 12:12:12 午後 |
結果表:
| 鍵 | 日付 | データ |
| ABC1YA1Z | 2019/08/14 午後 10:10:10 | 99999 |
| ABCZYB4Z | 2019/08/14 11:11:11 午後 | 99999 |
| ABC1YA9Z | 2019/08/14 12:12:12PM | 。 |
Re: テーブルを結合するためのワイルドカードの扱いJara95 さん、ありがとうございます。これは解決策に非常に近いです。 いくつかの小さな編集を加えました。この方法を使用して列行をどのように参照しているかわかりません。
dt1[r,"DATA"]
この方法に切り替えたところ、うまくいきました。
dt1:DATA[r]
Regex を使用すると、OR を残すことができることもわかりました|演算子が適切に配置されているため、それらを置き換える必要はありません。
最後に変更したのは、N Col から N Row への For ループです。
最終的なスクリプトは次のようになります。
dt1 << New Column( "KEY_reg", character, formula( Substitute( dt1:KEY, "?", "[A-Z0-9]" ) ) );
dt2 << New Column( "DATA" );
For( r = 1, r <= N Row( dt1 ), r++,
r1 = dt2 << Get Rows Where( !Is Missing( Regex( dt2:KEY, dt1:KEY_reg[r] ) ) );
dt2:DATA[r1] = dt1:DATA[r];
);
再度、感謝します!
Re: テーブルを結合するためのワイルドカードの扱いKEY 形式を正規表現形式に変換できます。
dt1 はテーブル 1、dt2 はテーブル 2 です。
dt1<<NEW column=""></NEW>
を使ってみましたアップデートコマンドを実行しましたが、成功しませんでした。
dt2<< update(with(dt1),match columns(regex(:KEY,:KEY_reg ))) //[NOT WORKING]
ここでは手動で作業を行う方法を示します。
dt1<<NEW column=""></NEW>
ありがとう。