switch语句括号中的东西为啥一定得是整型的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了switch语句括号中的东西为啥一定得是整型的?相关的知识,希望对你有一定的参考价值。

当然,字符型、布尔型、枚举型可以转换成整型,所以也可以;
那么为什么不能是float之类的?
在我的想像里,switch后面的东西,和下面的case是配对的;
只是比if ,else if, else if, …… ,else之类的更简洁罢了;
那么为什么不能像if语句那样把float当作可以考虑范围呢?
或许有它自己的原因;
请高手指点!
多谢!

switch的判断条件只能是等于,所以对于数据类型的精度要求比较高。
字符型、布尔型、枚举型都可以转换成整型进行判断,是因为整形在相等不相等上有很大的确定性,而float和double表示的小数,毕竟精度都是有限的,超过限度以后的等于和不等于计算机就不好判定,故不能用。
if else 结构可以用< > 或者一些其他的复杂条件进行判断,所以支持其他类型。
所以,switch只能用于简单的跳转判断,而且一定能被if else 结构代替
参考技术A switch 为了在编译时生成跳转表(快速跳转),限制了在其之后的元素必须是常量表达式,也即常量的字符或数字。
比如 case 'c',case 1,而不能case c,case i。
switch(x)

case 0: break;
case 1 + 1: break; //在编译时已计算表达式,相当于case 2
case 2: break; //重复的case,出错
case 1: break;
default: break;
参考技术B 记得之前跟别人讨论过这个问题,大致是这样的:
因为Switch的每个case有入口地址,那如果是int型,就很好计算出每一个case的入口地址,就和你定义一个数组一样
int a[3];
a[1]...数组下标为什么不可以用float型呢,很明显那样查找地址非常不方便.

如果你熟悉asm的话,建议你去看看,这样你就可以理解编译器是如何处理的了.

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

1、语句如下:

select 字段A, 字段B, 字段A + 字段B as 字段C  From 表1

注:字段A加上字段B的计算列命名为字段C

2、计算列

计算列由可以使用同一表中的其他列的表达式计算得来。表达式可以是非计算列的列名、常量、函数,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。

原题的答案就是“计算列”。

扩展资料:

计算列应用范围

计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何可使用正则表达式的其他位置,但下列情况除外:

用作 CHECK、FOREIGN KEY 或 NOT NULL 约束的计算列必须标记为 PERSISTED。如果计算列的值由具有确定性的表达式定义,并且索引列中允许使用计算结果的数据类型,则可将该列用作索引中的键列,或者用作 PRIMARY KEY 或 UNIQUE 约束的一部分。

例如,如果表中含有整数列 a 和 b,则可以对计算列 a + b 创建索引,但不能对计算列 a + DATEPART(dd, GETDATE()) 创建索引,因为在后续调用中,其值可能发生改变。

计算列不能作为 INSERT 或 UPDATE 语句的目标。

数据库引擎基于使用的表达式自动确定计算列的为 Null 性。即使只有非空列,大多数表达式的结果也“认为”可为空值,因为下溢或溢出生成的结果也可能为空。使用带 AllowsNull 属性的 COLUMNPROPERTY 函数可查明表中任何计算列的为 Null 性。

通过指定 ISNULL (check_expression, constant) 可以将可为空值的表达式转换为不可为空值的表达式,其中, constant 是可替换所有空结果的非空值。

参考资料:

百度百科.计算列



参考技术A

通过GROUP_CONCAT实现,具体过程如下:

1、原SQL语句如下:

SELECT q.`id`, q.`questionContent`, o.`questionOption` FROM `exam_question` q

INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId` 

WHERE q.`questionType` = 1

2、此时的查询结果如下表:

3、现在根据ID,将 questionOption 的字段整合拼接在一起,更改后的SQL语句如下:

SELECT q.`id`, q.`questionContent`, GROUP_CONCAT(o.`questionOption`) AS questionOptionList FROM `exam_question` q

INNER JOIN `exam_question_option` o ON q.`id` = o.`questionId` 

WHERE q.`questionType` = 1

GROUP BY q.`id`

3、执行结果如下:

扩展资料:

函数重点:不要忘了 GROUP BY id。

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']),group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函

数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

参考技术B

SQL中字符型字段的拼接可以使用“+”或者“||”来实现,不过考虑到你问题中这几个字段属于整形字段,需要先将整形进行数据类型转换后,再使用“+”或者“||”拼接。

拼接的语法为:

SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10)+ '-' + ........)  as P FROM TABLE ;

或者:

SELECT CAST(COLUMN1 AS VARCHAR(10)) || '-' + CAST(COLUMN2 AS VARCHAR(10) || '-' || ........)  as P FROM TABLE ;

其中CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

语法:CAST (expression AS data_type)

举个例子:已知表 TableA,含ID、yy、mm、dd四个整数型字段。

使用sql将yy、mm、dd三个字段进行拼接,语法:

select ID,cast(yy as varchar(10))+ '-' + cast(mm as varchar(10)) + '-' + cast(dd as varchar(10))  as pp from TableA;

则输出结果为:

扩展资料:

在SQL中,不同的数据库拼接字段的方法不尽相同,如

MySQL: CONCAT()

Oracle: CONCAT(), ||

SQL Server: +

CONCAT() 的语法如下:

CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。

请注意,Oracle的CONCAT()只允许两个参数;

换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。

例子1:

MySQL/Oracle:

SELECT CONCAT(region_name,"-",store_name) name  FROM Geography

SELECT CONCAT(region_name,store_name) FROM Geography

WHERE store_name = 'Boston';

结果:

'EastBoston

参考技术C 哪种数据库?
如果是SQLSERVER: SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) as P FROM TABLE 这么一直拼就好了。
如果是ORACLE: SELECT TO_CHAR(COLUMN1) || '-' || TO_CHAR(COLUMN1)|| '-' || TO_CHAR... AS P FROM TABLE本回答被提问者采纳
参考技术D SELECT CONVERT(VARCHAR(10),BILLID) + CONVERT(VARCHAR(10),BILLID) FROM S_BILL sb

说明,所有数字都可以,可以很多个字段连接,在SQL2000下测试过

这个最易明了,CONVERT(VARCHAR(10),BILLID) 转成字符,
+ 表示连接

以上是关于switch语句括号中的东西为啥一定得是整型的?的主要内容,如果未能解决你的问题,请参考以下文章

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

1、sql查询语句时怎么把几个字段拼接成一个字段?这几个字段是整型的。

JAVA流程控制语句

switch语句和for循环

Java——switch选择结构

Java中的switch语句怎么使用