gpt4 book ai didi

MySQL从空格分隔的字符串中选择比较数字

转载 作者:可可西里 更新时间:2023-11-01 08:24:16 25 4
gpt4 key购买 nike

我有一个 Resolution表中分辨率以空格分隔的列,例如:1024 768 .

我想选择所有包含 width 的行(第一个数字)介于 A 和 B 之间。

如何在 MySQL 中编写这样的东西?

假设 A 是 500,B 是 1200,resolution是列的名称。

SELECT * FROM myTable WHERE first_value(resolution) > 500 AND first_value(resolution) < 1200.

我可以用什么来获得 first_value空格分隔的字符串作为数字?

最佳答案

您可以使用 SUBSTRING_INDEX() (参见 sqlfiddle ):

SELECT *
FROM myTable
WHERE SUBSTRING_INDEX(resolution, ' ', 1) > 500 AND SUBSTRING_INDEX(resolution, ' ', 1) < 1200;

特别说明:请注意,使用此方法将无法利用表上的任何索引(随着表变大,此查询会变得更慢)。因为您需要使用函数拆分每一行,所以此查询无法使用索引来过滤此数据。理想情况下,您应该在插入时将此数据拆分为两个单独的列(我会考虑使用触发器,或者可能修改您的代码以不同方式插入数据),然后以这种方式过滤数据。

下面是一个简单的触发器:

CREATE TABLE IF NOT EXISTS `test` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`resolution` varchar(255) NOT NULL,
`resolution_width` int(11) signed NULL,
`resolution_height` int(11) signed NULL,
PRIMARY KEY (`id`) -- DON'T FORGET YOUR INDEX ON resolution_width and resolution_height
-- (Or all this will be for naught)
) DEFAULT CHARSET=utf8 //

--Be sure to add a similar one for BEFORE UPDATE if you're updating data as well
CREATE TRIGGER MyTrigger BEFORE INSERT ON `test`
FOR EACH ROW BEGIN
SET NEW.resolution_width = CAST(SUBSTRING_INDEX(NEW.resolution, ' ', 1) AS SIGNED),
NEW.resolution_height = CAST(SUBSTRING_INDEX(NEW.resolution, ' ', -1) AS SIGNED);
END//

INSERT INTO `test` (`resolution`) VALUES ('1100 2200');

关于MySQL从空格分隔的字符串中选择比较数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48481741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com