Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:将VARCHAR转换为十进制并在范围之间查找_Mysql - Fatal编程技术网

MySQL:将VARCHAR转换为十进制并在范围之间查找

MySQL:将VARCHAR转换为十进制并在范围之间查找,mysql,Mysql,我在一列中有一些类似的数据 H1.1 H1.2 H1.3 H1.10 H50.1 H50.5 H55.5 我想在1.10到50.1之间搜索。我尝试过这样的查询,但没有得到想要的结果 SELECT p_code FROM table WHERE CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', 1),SIGNED INTEGER) between CONVERT(SUBSTRING_INDEX('1.1', '.', 1),SIGNED

我在一列中有一些类似的数据

H1.1
H1.2
H1.3
H1.10
H50.1
H50.5
H55.5
我想在1.10到50.1之间搜索。我尝试过这样的查询,但没有得到想要的结果

SELECT p_code FROM table 
WHERE CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', 1),SIGNED INTEGER) between CONVERT(SUBSTRING_INDEX('1.1', '.', 1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX('1.99', '.', 1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', 1),SIGNED INTEGER) 
between CONVERT(SUBSTRING_INDEX('1.1', '.', -1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX('1.99', '.', -1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', 1),SIGNED INTEGER)>=CONVERT(SUBSTRING_INDEX('1.1', '.', 1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', 1),SIGNED INTEGER)<=CONVERT(SUBSTRING_INDEX('1.99', '.', 1),SIGNED INTEGER)
AND CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', -1),SIGNED INTEGER)>=CONVERT(SUBSTRING_INDEX('1.1', '.', -1),SIGNED INTEGER) 
AND CONVERT(SUBSTRING_INDEX(REPLACE(`code`,'H',''), '.', -1),SIGNED INTEGER)<=CONVERT(SUBSTRING_INDEX('1.99', '.', -1),SIGNED INTEGER)
ORDER BY LENGTH(`code`)  desc ,`code` desc

可以使用临时表执行此操作:

CREATE TEMPORARY TABLE temp_table (
    code decimal(5,3)
);

INSERT INTO temp_table (code)
SELECT CONVERT(REPLACE(`code`,'H',''), DECIMAL(5,3))
FROM `table`;
SELECT code FROM temp_table WHERE code BETWEEN 1.10 AND 50.1;

嘿,谢谢你的回答…让我检查一下它是否工作创建临时表临时表代码小数5,3;在临时表代码中插入,从表中选择CONVERTREPLACEcode、'H',小数5,3;从temp_表中选择代码,其中代码介于1.1和1.10之间;仅显示1.10,但结果必须为1.1,1.2,1.3是否为1.10和50.1之间的1.3?还是不?
CREATE TEMPORARY TABLE temp_table (
    code decimal(5,3)
);

INSERT INTO temp_table (code)
SELECT CONVERT(REPLACE(`code`,'H',''), DECIMAL(5,3))
FROM `table`;
SELECT code FROM temp_table WHERE code BETWEEN 1.10 AND 50.1;