给定一个字符串形式的测量表(即"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),并相应地进行查询。