如何在MySQL中正确地标记令牌

时间:2016-06-21 14:08:04

标签: mysql

我意识到我们可以使用substring()locate()函数进行tokonization

我试过了

insert into sum_of_counts
    select substring(pair,1,locate('|',pair)),
         sum(count)
    from em
    group by substring(pair,1,locate('|',pair))

例如:我们使用'resumption ||| resumption'作为对substring('resumption|||resumption',1,locate('|','resumption|||resumption'))后查询 它应该是resumption| 但在查询后出现了

+------------+------+
| wild_pair  | sum  |
+------------+------+
| resumption |    8 |
+------------+------+

问题是我们可以在'resumption|||resumption'表中找到em 在我查看表格sum_of_counts之后,wild_pair的某些word|只有word一些wild_pair只是<asp:Repeater runat="server" ID="repTest"> <ItemTemplate> <asp:Button runat="server" Text='<%#Eval("Id", "button_{0}") %>' /> </ItemTemplate> </asp:Repeater> 我该怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

SELECT
  LEFT(`pair`, LOCATE('|||', `pair`)) `wild_pair`,
  SUM(count) `sum`
FROM `em`
GROUP BY `wild_pair`;

应该更容易做同样的事情。

如果在将结果插入另一个表时发生错误,请检查现有列是否足够宽以便以全长方式获取计算数据。

答案 1 :(得分:0)

您的结果不可能:

mysql> select locate('|', 'resumption|||resumption');
+----------------------------------------+
| locate('|', 'resumption|||resumption') |
+----------------------------------------+
|                                     11 |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> select substring('resumption|||resumption', 1, 11);
+---------------------------------------------+
| substring('resumption|||resumption', 1, 11) |
+---------------------------------------------+
| resumption|                                 |
+---------------------------------------------+
1 row in set (0.00 sec)

您确定pair总是foo|||bar与3 |||吗?