0

任何人都有任何指示我如何将通配符存储在数据库中并查看字符串匹配的行?可以做到吗?

例如 DB 包含如下表:

第一列中带有通配符的两列表

所以 john3136 应该得到他正常工资的 10 倍。fred3136 将得到他正常工资的一半。harry3136 可能会使应用程序崩溃,因为没有匹配的数据;-)

代码需要执行以下操作:

foreach(Employee e in all_employees) {
    SELECT Multiplier FROM PayScales WHERE
        //??? e.Name matches the PayScales.Name wildcard
}

谢谢!

编辑 这是一个现实世界的问题:我有一个包含通配符的参数文件。该代码当前遍历员工,遍历参数文件以寻找匹配项-您可以看到我为什么要对其进行“数据库化” ;-)

通配符是可选的。该行可能会说“john3136”以仅匹配一名员工。(真正的应用程序实际上并不是员工,所以即使在这个简单的示例中看起来有点矫枉过正,它也确实有意义)

有一个选择:在开始之前我确实知道所有员工的姓名,因此我可以遍历它们并有效地扩展临时表中的通配符。(所以如果我在起始表中有 john3136*,它可能会根据员工列表扩展到 john3136、john31366 等)。我希望找到比这更好的方法,因为它需要更多的维护(例如,如果我们添加功能来添加员工,我们需要维护扩展的通配符表)。

4

1 回答 1

0
SELECT * FROM payscales 
 WHERE e.Name 
  LIKE regexp_replace(name, E'^\\*|\\*$', '%', 'g');

不知道你用的是哪个数据库。上面的查询适用postgresql,只需用 替换尾随和前导通配符%,即LIKE通配符。

如果不存在通配符,则它必须匹配完整的字符串。

于 2013-01-10T08:28:06.450 回答