2013-10-03 37 views
1

我正在使用SQLite数据库。我如何取词只包含一组给定的字母?获取使用包含字母过滤的单词列表

例如如果字母是:h, o, e, p, g, m

那么结果可能包含家,诗歌等。

通过2 ^(数字字符的)
+0

单词必须包含所有给定的字母,至少包含一个或什么? –

+0

字母必须包含所有字母。 – Raj

回答

2

将您的信件列表看起来像这样的条件:

select Word 
from words 
where 
length(
    replace(
    replace(
    replace(
    replace(
    replace(Word 
     ,'h','') 
     ,'o','') 
     ,'e','') 
     ,'p','') 
     ,'m','') 
    ) = 0 
-- In the expressions below replace 1 with the number of copies 
-- of each letter than you have 
and length(Word)-length(replace(Word,'h','')) <= 1 
and length(Word)-length(replace(Word,'o','')) <= 1 
and length(Word)-length(replace(Word,'e','')) <= 1 
and length(Word)-length(replace(Word,'p','')) <= 1 
and length(Word)-length(replace(Word,'m','')) <= 1 

的想法是删除每个字母列表从词,看看结果变成空的,并确认是否有字母的使用次数超过允许的次数。这会产生你想要的结果(demo)。打印replace(每个字母,然后打印Word,然后打印,'x',''),从你的列表中的每个字符替换x

查询的第一部分可以通过一个简单的循环,它打印“递归”串生产。

查询的第二部分是通过检查您拥有的每个不同的字母,然后创建一个与“信函清单”中的计数相对应的表达式来生成的。例如,如果您有两个'o' s,请添加

and length(Word)-length(replace(Word,'o','')) <= 2 
+0

很好....这是工作正常...感谢很多家伙.. – Raj

+0

还是一个问题: 从tblWord中选择字其中的长度(替换(替换(替换(替换(替换(替换(替换(Word,一个”, ''), 'E', ''), 'N', ''), 'A', ''), 'G', ''), 'M', ''), 'E' ,''))= 0 这将返回:游戏,名称,蛋,量具,帮派等...... 但我想如果'克'只是一次那么'蛋','盖奇'和'帮派'不应该在那里..., – Raj

+0

@Raj表达方式变得更长,但这个想法基本保持不变。我也更新了演示。 – dasblinkenlight

0

第一循环启用/禁用每个字符(可能是,如果相同有点难度字符被使用)。

然后在上面的循环中,通过置换算法循环所有字符的组合。

相关问题