首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较MySQL中的用户集变量?

如何比较MySQL中的用户集变量?
EN

Stack Overflow用户
提问于 2015-12-25 05:40:20
回答 3查看 1.2K关注 0票数 1

我在这里偶然发现了一个先前被问到并回答过的问题:

How to use comparison operator for numeric string in MySQL?

我完全同意最好的答案。但当我试图创造自己的答案时,它留给了我一个问题。我试图选择第一个数字并将其转换为整数。接下来,我想将这个整数与一个数字进行比较(在问题的情况下,为3)。

这是我创建的查询:

代码语言:javascript
运行
复制
SELECT experience,
       CONVERT(SUBSTRING_INDEX(experience,'-',1), UNSIGNED INTEGER) AS num
FROM employee
WHERE @num >= 3;

为了简单起见,experience中的数据是: 4-8。

查询不返回任何错误。但它也不返回数据。我知道可以将列中的数据与用户定义的变量进行比较。但是,是否有可能像我试图做的那样,将数据(本例中的整数)与变量进行比较呢?

这纯粹是出于好奇,是为了学习一些东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-25 06:09:59

是的,派生表就行了。下面的内部select块是一个派生表。每个派生表都需要一个名称。就我而言,xDerived

其策略是让派生表清除列名的使用。从派生块中出来的是一个名为num的干净列,外部select可以自由使用。

模式

代码语言:javascript
运行
复制
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');

查询

代码语言:javascript
运行
复制
select id,experience,num 
from 
(   SELECT id,experience, 
    CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) AS num  
    FROM employee  
) xDerived 
where num>=7;

结果

代码语言:javascript
运行
复制
+----+------------+------+
| id | experience | num  |
+----+------------+------+
|  2 | 7-1        |    7 |
|  5 | 8-6        |    8 |
|  7 | 10-4       |   10 |
+----+------------+------+

注意,您的@num概念是错误的,但希望我解释一下您上面的意思。

另外,我使用的是7而不是3,因为所有的样本数据都会返回,我想向您展示它的工作原理。

票数 1
EN

Stack Overflow用户

发布于 2015-12-25 06:09:58

AS num指令将convert的结果命名为num,而不是名为@num的变量。

您可以重复转换

代码语言:javascript
运行
复制
SELECT experience,CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER)
FROM employee
WHERE CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) >= 3;

或者使用部分(派生)表(只使用一个convert)

代码语言:javascript
运行
复制
SELECT experience,num 
FROM (select experience,
      CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) as num
      FROM employee) as partialtable WHERE num>=3;
票数 1
EN

Stack Overflow用户

发布于 2016-07-08 23:51:49

简单多了。(或者至少要短得多)这将适用于所描述的数据,即“数字、-、其他东西”。

代码语言:javascript
运行
复制
SELECT experience,
     0+experience AS 'FirstPart'
   FROM employee
   WHERE 0+experience >= 3

为什么?0+string被解析为“将字符串转换为数字,然后将其添加到0”。转换字符串将提取到第一个非数字的数字,然后将其转换为数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34460315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档