我想知道是否可以检查列中是否包含字符串值,前提是该列包含起始值和结束值。
例如:如果表格的列NR包含以下行:
400-500
45-76,23-25
12,14-19,21
我想找到其中值为421的行。所以答案应该是第一行。
这可以在mysql中使用吗?
答案 0 :(得分:2)
您应该有两个表:一个用于列,一个用于列范围。有了它,一个简单的查询将检索你需要的东西。
CREATE TABLE foo (
foo_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (foo_id)
)
ENGINE=InnoDB;
CREATE TABLE foo_range (
foo_id INT(10) UNSIGNED NOT NULL,
column_from INT(10) UNSIGNED NOT NULL,
column_to INT(10) UNSIGNED NOT NULL,
INDEX foo_range_fk1 (foo_id),
CONSTRAINT foo_range_fk1 FOREIGN KEY (foo_id) REFERENCES foo (foo_id)
)
ENGINE=InnoDB;
INSERT INTO foo(foo_id)
VALUES (1), (2), (3);
INSERT INTO foo_range(foo_id, column_from, column_to)
VALUES (1, 400, 500), (2, 45, 74), (2, 23, 25), (3, 12, 14), (3, 19, 21);
SELECT foo_id
FROM foo_range
WHERE 421 BETWEEN column_from AND column_to;
实际上,除非您想存储其他数据,否则主表甚至不需要:)
如果您遇到其他数据库设计,您可能需要检索所有行并使用客户端语言进行匹配。
答案 1 :(得分:0)
我同意上述评论。 向表中添加两列并使用substring_index()函数
更新它update table
set lft_value = substring_index(value,'-',1),
rgt_value = substring_index(value,'-',-1)
如果一切正常,请删除原始值。 现在,在下限和上限内找到值非常简单。
修改。保持表结构查询将成为:
select * from table
where 421 between
substring_index(value,'-',1),
and substring_index(value,'-',-1)
但我不喜欢这个解决方案。