【发布时间】:2015-07-29 05:30:36
【问题描述】:
我有一个包含以下内容的表格:
Value 是一个 varchar 类型,用于存储字符串字符,例如 comma 和 dashes,所以任何事情都会发生。但通常它只包含numbers、comma 和dash 来指定间隔。
id | value |
------------------
1 | 1,2,5,8-10 |
2 | 1,2,3 |
3 | 1-3 |
4 | 1-3, 4-5 |
5 | 1-2,2-3 |
我想执行select 查询,以在数据库级别(而不是代码级别)以“规范化”代码可读格式(逗号分隔)检索值,这就是为什么我需要选择一个像这样的表。
id | value | normalized
-------------------------------
1 | 1,2,5,8-10 |1,2,5,8,9,10
2 | 1,2,3 |1,2,3
3 | 1-3 |1,2,3
4 | 1-3, 4-5 |1,2,3,4,5
5 | 1-2,2-3 |1,2,3
id 为 5 的记录的特殊情况,即使它指定了 2 两次,它仍然应该只检索 2 一次。 postgres 中是否有一个功能可以做到这一点?如果不是,我如何解析字符串并对Postgres sql 中的数字进行排序?
【问题讨论】:
-
因此您有一种自定义方式来存储一组可能不相交的范围,并且您希望将其转换为一个简单的集合。
-
是的,完全正确...因为数据是作为一个简单的字符串接收的,就像用户输入的那样,并希望以这种方式检索它。
-
但您不必担心数据是如何输入的,表单中的代码会处理它。除了逗号和破折号外,它永远不会包含字符串。我们允许这样的用户输入,因为它是最具逻辑可读性的输入方式。对于一个区间,比如说 330-540 ......你不能真的期望用户输入 330,331,332 ......等等......我是 postgres 和 sql 的新手......没什么帮助? :)
标签: sql regex postgresql postgresql-9.3