2017-01-04 116 views
0

在sqlite3表中我们有如下所示的名称。获取sqlite3字符串中每个单词的第一个字符

Monty Python 
Luther Blissett 
Rey maR EsteBaN 
Monty Cantsin 
Geoffrey Cohen 
Karen Eliot 
Poor Konrad 

我需要一个查询来从数据库中获取字符。

  1. 最初我需要一个查询,应该获取字符串中每个单词的第一个字母。在上面的例子中,它应该显示M,P,L,B,R,E,C,G,K

  2. 假设如果用户在上述查询后选择C,那么它应该获取下一个可能的字符C a ntsin和C Ø母鸡即A型和O

请提供解决方案如何能够到达任何投入?

+0

如果对数据库有不同的查询,那很好。任何解决方案 – Francis

+0

您确定,您的问题最好使用多个数据库查询解决?作为替代方案,请考虑查询数据库一次并编写提取信息的代码。 –

+0

使用[substr()](http://www.sqlite.org/lang_corefunc.html#substr)和[LIKE](http://www.sqlite.org/lang_expr.html#like)。 –

回答

0

下面的解决方案将工作,如果只有名字被计算。

考虑数据:

sqlite> SELECT name FROM COMPANY; 
    Paul Allen 
    Mark 
    Monty Python 
    Luther Blissett 
    Monty Cantsin 

对于第一次查询:

sqlite> SELECT distinct substr(name,1,1) FROM COMPANY; 
    P 
    M 
    L 

,后来换2个输出试试下面的算法:

  • ,如果你有1级字符的输入,然后使用substr(name,2,1)
  • 如果您有2个字符输入,然后使用substr(名称,3,1)
  • ..一般:如果x是字符输入的数量,y是预期的字符输出的数量,请尝试substr(name,x + 1, Y)
sqlite> SELECT distinct substr(name,2,1) FROM COMPANY where name like 'M%'; 
    a 
    o 


    sqlite> SELECT distinct substr(name,3,1) FROM COMPANY where name like 'Ma%'; 
    r 

如果别人的话也需要考虑搜索,与子查询代替表名,如下。

SELECT distinct substr(name,2,1) FROM 
(
    select name from company where name like 'A%' -- counts for first word 
    UNION 
    select name from company where name like '% A%' -- counts for words that start with space 
); 

请注意,上面的查询将只返回第一个字的人物,虽然这场比赛是所有的话,将考虑名字为源获取字符。

+0

该查询仅给出部分结果。我需要字符串中每项工作的第一个字符。这意味着对于 – Francis

+0

以上查询只给出部分结果。我需要获取字符串中每个单词的第一个字符。这意味着用于 艾伦 - (初字母表P,A) 马克 - (初字母表M) 巨蟒 - (初字母表M,P) 卢瑟·布利塞特 - (初字母表L,B) 蒙蒂Cantsin - (第一个字母是M,C) 它应该打印字母P,A,M,L,B,C。任何指针? – Francis

相关问题