处理连接表的通配符我需要联接多个表,但我需要联接的列具有表列之一的通配符。 表不是太大,因此不需要非常高效。
在下面的表 1 KEY 列中,问号所在的位置可以是任何单个字母数字字符。 括号中是 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 | 。 |
回复:处理连接表的通配符谢谢 Jara95 - 这非常接近解决方案。 我做了一些小的编辑 - 不确定您如何使用此方法引用列行:
dt1[r,"DATA"]
我切换到这个方法并且它有效:
dt1:DATA[r]
我还发现使用正则表达式你可以离开 OR |操作员已就位,无需将其替换掉。
我改变的最后一件事是 For 循环从 N Col 到 N Row。
所以我的最终脚本看起来像这样:
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];
);
再次感谢!
回复:处理连接表的通配符您可以将 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>
谢谢。