当前位置: 首页 > 面试题库 >

在MySQL中将定界字符串转换为多个值

邵兴庆
2023-03-14
问题内容

我有一个mysql旧表,其中包含一个客户端标识符和一个项目列表,后者为逗号分隔的字符串。例如"xyz001", "foo,bar,baz"。这是旧的东西,用户坚持要能够编辑以逗号分隔的字符串。

现在,他们需要一个报表,上面的报表分为不同的行,例如

"xyz001", "foo"
"xyz001", "bar"
"xyz001", "baz"

将字符串分成子字符串很容易做到,我已经编写了一个过程来创建一个单独的表,但这需要触发器来处理删除,更新和插入。此查询很少需要(例如每月一次),但在运行时必须绝对最新,因此例如,不保证触发器的开销,并且计划的创建表的任务可能不够及时。

有什么方法可以编写函数来返回表或集合,以便我可以根据需要将标识符与各个项目连接起来?


问题答案:

这称为走绳子。这是一个示例,说明如何使用提供的规范进行操作:

您将需要创建一个表,其中包含与字段长度+ 1一样多的整数。因此,如果字段的长度为255,则将需要256条记录,其中仅包含0-255之间的一个数字。

int_table

+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+

接下来,您将需要一个查询,该查询将联接到该表上,并检查该位置是否存在逗号。(我叫你的表legacy_table具等领域client,并items分别。)

select 
  legacy_table.client, 
  substring(
    legacy_table.items, 
    int_table.i + 1, 
    if(
      locate(',', legacy_table.items, int_table.i + 1) = 0, 
      length(legacy_table.items) + 1, 
      locate(',', legacy_table.items, int_table.i + 1)
    ) - (int_table.i + 1)
  ) as item
from legacy_table, int_table
where legacy_table.client = 'xyz001'
  and int_table.i < length(legacy_table.items)
  and (
    (int_table.i = 0) 
    or (substring(legacy_table.items, int_table.i, 1) = ',')
  )

您实际使用它的效率可能不够高,但是我想以它为例进行介绍,以便您了解可用的功能。



 类似资料:
  • 问题内容: 我以前使用下面的查询将逗号分隔的字符串转换为行- 但是,现在我的分隔符是-‘〜^’ 我不能对此定界符使用相同的查询。 我预计 - 柱子 请帮忙 或如果提供的定界符为〜^,则有可能获取第n个元素 最好的祝福 问题答案: 简化此方法以拆分字符串,同时允许null: 与链接的答案一样,它会非贪婪地寻找任何字符,然后是(插入符号是转义的)或行尾的组合。该电话还采用了可选的参数指定-所以只得到了

  • 问题内容: MySQL是否会自动将字符串转换为数字值? 转换如何进行? ‘1234’= 1234吗? ‘1abc’= 1? ‘文本’= 1? 给定那是bigint类型的,该查询将如何解释? 问题答案: 前三个问题的答案是:是,是和否。 当字符串转换为数字时,它将成为value 。 描述类型转换的文档在这里。 对于您的查询: 该摘录摘自文档: 在所有其他情况下,将参数作为浮点数(实数)进行比较。 换

  • 问题内容: 我有一个字符串数组,用破折号分隔来描述父/子关系。因此,如果鲍勃的老板是吉姆,而吉姆的老板是弗雷德,则鲍勃在数组中的条目将是“弗雷德-吉姆- 鲍勃”,而吉姆的条目将是“弗雷德-吉姆”。我没有能力更改数据输入的方式,因此我一直在寻求帮助,以将这些值转换为类似于以下内容的JSON的最佳方法: 任何帮助将不胜感激。谢谢。 问题答案: 输出JSONify为:

  • 问题内容: 我有一列用作,我想将其选择为。 可能吗? 我的样本数据格式为;-> 问题答案: 正如MySQL所讲的,使用带有日期文本的字符串列作为日期字段,您可以 您还可以在子句中处理这些日期字符串。例如 您可以通过这种方式处理各种日期/时间布局。请参考该函数的格式说明符,以了解可以在中添加第二个参数的内容。

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 问题内容: 我有一个; 我想转换为字符串数组。我该怎么做?有内置的Java函数吗?可以手动完成,但是我正在搜索Java内置函数。 我想要一个数组,其中字符串的每个字符都是一个字符串。像char’n’现在将是存储在数组中的字符串“ n”。 问题答案: 要开始你的作业,请在正则表达式上拆分字符串,该表达式可以为空字符串: 产生数组: 留空的第一条目留给读者练习:-) 注意:在Java 8中,不再包含空