我在这里偶然发现了一个先前被问到并回答过的问题:
How to use comparison operator for numeric string in MySQL?
我完全同意最好的答案。但当我试图创造自己的答案时,它留给了我一个问题。我试图选择第一个数字并将其转换为整数。接下来,我想将这个整数与一个数字进行比较(在问题的情况下,为3)。
这是我创建的查询:
SELECT experience,
CONVERT(SUBSTRING_INDEX(experience,'-',1), UNSIGNED INTEGER) AS num
FROM employee
WHERE @num >= 3;为了简单起见,experience中的数据是: 4-8。
查询不返回任何错误。但它也不返回数据。我知道可以将列中的数据与用户定义的变量进行比较。但是,是否有可能像我试图做的那样,将数据(本例中的整数)与变量进行比较呢?
这纯粹是出于好奇,是为了学习一些东西。
发布于 2015-12-25 06:09:59
是的,派生表就行了。下面的内部select块是一个派生表。每个派生表都需要一个名称。就我而言,xDerived。
其策略是让派生表清除列名的使用。从派生块中出来的是一个名为num的干净列,外部select可以自由使用。
模式
create table employee
( id int auto_increment primary key,
experience varchar(20) not null
);
-- truncate table employee;
insert employee(experience) values
('4-5'),('7-1'),('4-1'),('6-5'),('8-6'),('5-9'),('10-4');查询
select id,experience,num
from
( SELECT id,experience,
CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) AS num
FROM employee
) xDerived
where num>=7;结果
+----+------------+------+
| id | experience | num |
+----+------------+------+
| 2 | 7-1 | 7 |
| 5 | 8-6 | 8 |
| 7 | 10-4 | 10 |
+----+------------+------+注意,您的@num概念是错误的,但希望我解释一下您上面的意思。
另外,我使用的是7而不是3,因为所有的样本数据都会返回,我想向您展示它的工作原理。
发布于 2015-12-25 06:09:58
AS num指令将convert的结果命名为num,而不是名为@num的变量。
您可以重复转换
SELECT experience,CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER)
FROM employee
WHERE CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) >= 3;或者使用部分(派生)表(只使用一个convert)
SELECT experience,num
FROM (select experience,
CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) as num
FROM employee) as partialtable WHERE num>=3;发布于 2016-07-08 23:51:49
简单多了。(或者至少要短得多)这将适用于所描述的数据,即“数字、-、其他东西”。
SELECT experience,
0+experience AS 'FirstPart'
FROM employee
WHERE 0+experience >= 3为什么?0+string被解析为“将字符串转换为数字,然后将其添加到0”。转换字符串将提取到第一个非数字的数字,然后将其转换为数字。
https://stackoverflow.com/questions/34460315
复制相似问题