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;