0

我还没有完全找到这个问题的答案,这似乎有点棘手(是的,我是初学者)。我有两张桌子;eb_site并且eb_register它们都有id_glo连接它们的柱子。尽管这些字段中的值并不完全相同,但数字是连接因素。一个例子:

eb_site = kplus.hs.dlsn.3074823

eb_register = kplus.hs.register.3074823-1"

我如何选择那些,即列出 eb_register 中的数字与 in 中的数字不同的列表eb_site(并忽略 dlsn/register 之间的不匹配)。

并且eb_register在示例的末尾有一个-1(固定的末尾没有-1)。

感谢您的任何回复。

编辑:哎呀对不起伙计们,措辞不好,已编辑

Rgds,

施泰纳

4

2 回答 2

0

解决方案的质量将取决于可能的id_glo值和您可以使用的 sql 方言。作为开始,尝试

    select s.id_glo
         , r.id_glo
      from eb_site     s
inner join eb_register r on (     replace(replace(s.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') <> replace(replace(r.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '')
                              and replace(replace(r.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') not like replace(replace(s.id_glo, 'kplus.hs.register.', ''), 'kplus.hs.dlsn.', '') || '-%'
           )
         ;

此查询假定:

  • 没有与您给出的前缀不同的前缀
  • 数字补码只会出现在记录中eb_register
于 2013-04-15T18:31:35.507 回答
0

如果数字匹配,则数字的反面匹配。下面使用 SQL Server 语法从每个键中提取数字(和最后的小数点):

select *
from eb_site s join
     eb_register r
     on left(REVERSE(s.id_glo), charindex('.', reverse(s.id_glo))) =
        left(REVERSE(r.id_glo), charindex('.', reverse(r.id_glo)))

在其他数据库中,charindex()可能需要用另一个函数替换,例如instr()location()position()

于 2013-04-15T18:23:34.517 回答