Postgresql模式匹配数字的字符串列



给定一个字符串形式的测量表(即"4.6英寸,3毫米"、"长度:4.66英寸"等),只要数字匹配,我想检索基本上包含数字左侧或右侧任何内容的行。

换句话说,如果我在搜索"6":

  • 匹配:"6英寸"、"6in"、"asdf 6英寸"等
  • 不匹配:"16英寸"、"6.6英寸"、"66英寸"等

到目前为止,我有以下问题:

select distinct length from items where length ~ '[[:<:]]6[[:>:]]';

但这并不是我想要的,因为这就是结果:

     length      
---------------
 6.25 Inches
 4.6666 Inches
 6.5 Inches
 1.66 Inches
 6 Inches
 6.75 Inches
 6.71 Inches
 24.6 Inches
 3.6666 Inches

我使用的是PostgreSQL 9。如有任何帮助,我们将不胜感激。感谢

正如我所理解的,您希望字符串中的数字完全匹配。所以数字(在你的例子中是6)不能被数字或十进制符号包围

[^0-9.]6[^0-9.]

你可以把6改成你要找的任何数字。

怎么样:

'^[^0-9]*6[^0-9]*$'
create table foo (length text);
insert into foo values ('6 in'), ('asdf 6 in'), ('6in'), ('16 in'), ('6.6 in'), ('6.6'), ('with 66 in');
select distinct length from foo where length ~ '[^0-9 .][0-5.7-9 ]*6|6*[0-5.7-9 ]*[^0-9 .]';

已编辑以正确使用"6"one_answers"6.6"。

无意冒犯,但将其存储为varchar不是一个好主意。

这应该存储为两个单独的字段(数量/单位),或者(更好的是)单个字段(具有预定义单位的数量,例如mm),并相应地进行查询。

最新更新