• 关于 进制及进制之间的转换 的搜索结果

回答

十进制,二进制,八进制,十六进制及之间的转换 进制概念 1。 十进制 十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十进一。 历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。设计十进制机器比设计二进制机器复杂得多。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。设计过程简单,可靠性高。因此,现在改为二进制计算机。 2。 二进制 二进制以2为基数,只用0和1两个数字表示数,逢2进一。 二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。例如: (1)加法:0+0=0 0+1=1 1+0=1 1+1=0 (2)减法:0-0=0 1-1=0 1-0=1 0-1=1 (3)乘法:0*0=0 0*1=0 1*0=0 1*1=1 (4)除法:0/1=0 1/1=1,除数不能为0 3。 八进制 所谓八进制,就是其基数为8,基数值可以取0、1、2、3、4、5、6、7共8个值,逢八进一。 八进制与十进制运算规则一样。那么为什么要用八进制呢。难道要设计八进制的计算机么。实际上,八进制与十六进制的引用,主要是为了书写和表示方便,因为二进制表示位数比较长。如:(1024)10 用二进制表示为 (10000000000)2,共有11个数字,用八进制表示为(2000)8。更重要的是,由于二进制与八进制存在在一种对等关系,每三位二进制与一位八进制数完全对等(23=8)。所以二进制和十进制在运算上无区别,而时进制不具备这一优点。 4。 十六进制 十六进制应用也是非常广泛的一种计数制。在使用者看来,十六进制是二进制数的一种更加紧凑的一种表示方法。 基数为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十进一。在十六进制系统中,数值为10到15的数分别用A、B、C、D、E、F表示。 二进制数及与之等值的八进制、十进制和十六进制数 二进制 八进制 十进制 十六进制 0000 0 0 0 0001 1 1 1 0010 2 2 2 0011 3 3 3 0100 4 4 4 0101 5 5 5 01106 6 6 0111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 二。进制转换 1。二进制与十进制数间的转换 (1)二进制转换为十进制 将每个二进制数按权展开后求和即可。请看例题: 把二进制数(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10 (2)十进制转换为二进制 一般需要将十进制数的整数部分与小数部分分开处理。 整数部分计算方法:除2取余法 请看例题: 十进制数(53)10的二进制值为(110101)2 小数部分计算方法:乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,第一次乘法所得的整数部分为最高位。请看例题: 将(0.5125)10转换成二进制。(0.5125)10=(0.101)2 2。 八进制、十六进制与十六进制间的转换 八进制、十六进制与十六进制之间的转换方法与二进制,同十进制之间的转换方法类似。例如: (73)8=7*81+3=(59)10 (0.56)8=5*8-1+6*8-2=(0.71875)10 (12A)16=1*162+2*161+A*160=(298)10 (0.3C8)16=3*16-1+12*16-2+8*16-3=(0.142578125)10 十进制整数→→→→→八进制 方法:“除8取余” 十进制整数→→→→→十六进制 方法:“除16取余” 例如: (171)10=(253)8 (2653)10=(A5D)16 十进制小数→→→→→八进制小数 方法:“乘8取整” 十进制小数→→→→→十六进制小数 方法:“乘16取整” 例如: (0。71875)10=(0.56)8 (0.142578125)10=(0.3C8)16 3. 非十进制数之间的转换 (1)二进制数与八进制数之间的转换 转换方法是:以小数点为界,分别向左右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。例如: (423。45)8=(100 010 011.100 101)2 (1001001.1101)2=(001 001 001.110 100)2=(111.64)8 2。二进制与十六进制转换 转换方法:以小数点为界,分别向左右每四位二进制合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。例如: (ABCD。EF)16=(1010 1011 1100 1101.1110 1111)2 (101101101001011.01101)2=(0101 1011 0100 1011.0110 1000)2=(5B4B。68)16

马铭芳 2019-12-02 01:28:37 0 浏览量 回答数 0

回答

1。二进制与十进制数间的转换 (1)二进制转换为十进制 将每个二进制数按权展开后求和即可。请看例题: 把二进制数(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10 (2)十进制转换为二进制 一般需要将十进制数的整数部分与小数部分分开处理。 整数部分计算方法:除2取余法请看例题: 十进制数(53)10的二进制值为(110101)2 小数部分计算方法:乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,第一次乘法所得的整数部分为最高位。请看例题: 将(0.5125)10转换成二进制。(0.5125)10=(0.101)2 2。 八进制、十六进制与十六进制间的转换 八进制、十六进制与十六进制之间的转换方法与二进制,同十进制之间的转换方法类似。例如: (73)8=7*81+3=(59)10 (0.56)8=5*8-1+6*8-2=(0.71875)10 (12A)16=1*162+2*161+A*160=(298)10 (0.3C8)16=3*16-1+12*16-2+8*16-3=(0.142578125)10 十进制整数→→→→→八进制方法:“除8取余” 十进制整数→→→→→十六进制方法:“除16取余” 例如: (171)10=(253)8 (2653)10=(A5D)16 十进制小数→→→→→八进制小数 方法:“乘8取整” 十进制小数→→→→→十六进制小数方法:“乘16取整”例如: (0。71875)10=(0.56)8 (0.142578125)10=(0.3C8)16 3.非十进制数之间的转换 (1)二进制数与八进制数之间的转换 转换方法是:以小数点为界,分别向左右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。例如: (423。45)8=(100 010 011.100 101)2 (1001001.1101)2=(001 001 001.110 100)2=(111.64)8 2。二进制与十六进制转换 转换方法:以小数点为界,分别向左右每四位二进制合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。例如: (ABCD。EF)16=(1010 1011 1100 1101.1110 1111)2 (101101101001011.01101)2=(0101 1011 0100 1011.0110 1000)2=(5B4B。68)16 为什么需要八进制和十六进制? 编程中,我们常用的还是10进制……必竟C/C++是高级语言。 比如: int a = 100,b = 99; 不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。 但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是: 0000 0000 0000 0000 0110 0100 面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。 用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢。 2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。 6.2 二、八、十六进制数转换到十进制数 6.2.1 二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成 十进制 第0位 0 * 20 = 0 第1位 0 * 21 = 0 第2位 1 * 22 = 4 第3位 0 * 23 = 0 第4位 0 * 24 = 0 第5位 1 * 25 = 32 第6位 1 * 26 = 64 第7位 0 * 27 = 0 + --------------------------- 100 用横式计算为: 0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100 0乘以多少都是0,所以我们也可以直接跳过值为0的位: 1 * 22 + 1 * 23 + 1 * 25 + 1 * 26 = 100 6.2.2 八进制数转换为十进制数 八进制就是逢8进1。 八进制数采用 0~7这八数来表达一个数。 八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方…… 所以,设有一个八进制数:1507,转换为十进制为: 用竖式表示: 1507换算成十进制。 第0位 7 * 80 = 7 第1位 0 * 81 = 0 第2位 5 * 82 = 320 第3位 1 * 83 = 512 + -------------------------- 839 同样,我们也可以用横式直接计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839 结果是,八进制数 1507 转换成十进制数为 839 6.2.3 八进制数的表达方法 C,C++语言中,如何表达一个八进制数呢。如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。 所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。 由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。 现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时: int a = 100; 我们也可以这样写: int a = 0144; //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。 千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。 6.2.4 八进制数在转义符中的使用 我们学过用一个转义符'\'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。 比如,查一下第5章中的ASCII码表,我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。 事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。 6.2.5 十六进制数转换成十进制数 2进制,用两个阿拉伯数字:0、1; 8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7; 10进制,用十个阿拉伯数字:0到9; 16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊。 16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。 十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方…… 所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。 假设有一个十六进数 2AF5, 那么如何换算成10进制呢。 用竖式计算: 2AF5换算成10进制: 第0位: 5 * 160 = 5 第1位: F * 161 = 240 第2位: A * 162 = 2560 第3位: 2 * 163 = 8192 + ------------------------------------- 10997 直接计算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997 (别忘了,在上面的计算中,A表示10,而F表示15) 现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。 假设有人问你,十进数 1234 为什么是 一千二百三十四。你尽可以给他这么一个算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100 6.2.6 十六进制数的表达方法 如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。 C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O) 以下是一些用法示例: int a = 0x100F; int b = 0x70 + a; 至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。 6.2.7 十六进制数在转义符中的使用 转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符,可以有以下表达方式: '?' //直接输入字符 '\77' //用八进制,此时可以省略开头的0 '\0x3F' //用十六进制 同样,这一小节只用于了解。除了空字符用八进制数 '\0' 表示以外,我们很少用后两种方法表示一个字符。 6.3 十进制数转换到二、八、十六进制数 6.3.1 10进制数转换为2进制数 给你一个十进制,比如:6,如果将它转换成二进制数呢。 10进制数转换成二进制数,这是一个连续除2的过程: 把要转换的数,除以2,得到商和余数, 将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。 听起来有些糊涂。我们结合例子来说明。比如要转换6为二进制数。 “把要转换的数,除以2,得到商和余数”。 那么: 要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3。) “将商继续除以2,直到商为0……” 现在商是3,还不是0,所以继续除以2。 那就: 3 ÷ 2, 得到商是1,余数是1。 “将商继续除以2,直到商为0……” 现在商是1,还不是0,所以继续除以2。 那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!) “将商继续除以2,直到商为0……最后将所有余数倒序排列” 好极。现在商已经是0。 我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了。 6转换成二进制,结果是110。 把上面的一段改成用表格来表示,则为: 被除数 计算过程 商 余数 6 6/2 3 0 3 3/2 1 1 1 1/2 0 1 (在计算机中,÷用 / 来表示) 如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除: 请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。 说了半天,我们的转换结果对吗。二进制数110是6吗。你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。 6.3.2 10进制数转换为8、16进制数 非常开心,10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。 来看一个例子,如何将十进制数120转换成八进制数。 用表格表示: 被除数 计算过程 商 余数 120 120/8 15 0 15 15/8 1 7 1 1/8 0 1 120转换为8进制,结果为:170。 非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。 同样是120,转换成16进制则为: 被除数 计算过程 商 余数 120 120/16 7 8 7 7/16 0 7 120转换为16进制,结果为:78。 6.4 二、十六进制数互相转换 二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。 我们也一样,只要学完这一小节,就能做到。 首先我们来看一个二进制数:1111,它是多少呢。 你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。 然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。 记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。 下面列出四位二进制数 xxxx 所有可能的值(中间略过部分) 仅4位的2进制数 快速计算方法 十进制值 十六进值 1111 = 8 + 4 + 2 + 1 = 15 F 1110 = 8 + 4 + 2 + 0 = 14 E 1101 = 8 + 4 + 0 + 1 = 13 D 1100 = 8 + 4 + 0 + 0 = 12 C 1011 = 8 + 4 + 0 + 1 = 11 B 1010 = 8 + 0 + 2 + 0 = 10 A 1001 = 8 + 0 + 0 + 1 = 10 9 .... 0001 = 0 + 0 + 0 + 1 = 1 1 0000 = 0 + 0 + 0 + 0 = 0 0 二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。 如(上行为二制数,下面为对应的十六进制): 1111 1101 , 1010 0101 , 1001 1011 F D , A 5 , 9 B 反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢。 先转换F: 看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢。应该是8 + 4 + 2 + 1,所以四位全为1 :1111。 接着转换 D: 看到D,知道它是13,13如何用8421凑呢。应该是:8 + 2 + 1,即:1011。 所以,FD转换为二进制数,为: 1111 1011 由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。 比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数: 被除数 计算过程 商 余数 1234 1234/16 77 2 77 77/16 4 13 (D) 4 4/16 0 4 结果16进制为: 0x4D2 然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010。 其中对映关系为: 0100 -- 4 1011 -- D 0010 -- 2 同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。 下面举例一个int类型的二进制数: 01101101 11100101 10101111 00011011 我们按四位一组转换为16进制: 6D E5 AF 1B 6.5 原码、反码、补码 结束了各种进制的转换,我们来谈谈另一个话题:原码、反码、补码。 我们已经知道计算机中,所有数据最终都是使用二进制数表达。 我们也已经学会如何将一个10进制数如何转换为二进制数。 不过,我们仍然没有学习一个负数如何用二进制表达。 比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为: 00000000 00000000 00000000 00000101 5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。 现在想知道,-5在计算机中如何表示。 在计算机中,负数以其正值的补码形式表达。 什么叫补码呢。这得从原码,反码说起。 原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 比如 00000000 00000000 00000000 00000101 是 5的 原码。 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 取反操作指:原为1,得0;原为0,得1。(1变0; 0变1) 比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。 称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。 补码:反码加1称为补码。 也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。 比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。 那么,补码为: 11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011 所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。 再举一例,我们来看整数-1在计算机中如何表示。 假设这也是一个int类型,那么: 1、先取1的原码:00000000 00000000 00000000 00000001 2、得反码: 11111111 11111111 11111111 11111110 3、得补码: 11111111 11111111 11111111 11111111 可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。 一切都是纸上说的……说-1在计算机里表达为0xFFFFFF,我能不能亲眼看一看呢。当然可以。利用C++ Builder的调试功能,我们可以看到每个变量的16进制值。

boxti 2019-12-02 01:27:41 0 浏览量 回答数 0

回答

十六 十 八 二 计算机内部是以二进制形式表示数据和进行运算的;计算机内的地址等信号常用十六进制来表示,而人们日常又习惯用十进制来表示数据。这样要表示一个数据就要选择一个适当的数字符号来规定其组合规律,也就是要确定所选用的进位计数制。各种进位制都有一个基本特征数,称为进位制的“基数”。基数表示了进位制所具有的数字符号的个数及进位的规律。下面就以常用的十进制、二进制、八进制和十六进制为例,分别进行叙述。 一、常用的三种计数制 1、十进制(Decimal) 十进制的基数是10,它有10个不同的数字符号,即0、1、2、3、…、9。它的计数规律是“逢十进一”或“借一当十”。处在不同位置的数字符号具有不同的意义,或者说有着不同的“权”。所谓的“权”就是每一位对其基数具有不同的倍数。例如,一个十进制数为 123.45=1*102+2*101+3*100+4*10-1+5*10-2 等号左边为并列表示法,等号右边为多项式表示法,显然这两种表示法表示的数是等价的。在右边多项式表示法中,1、2、3、4、5被称为系数项,而102、101、100、10-1、10-2等被称为该位的“权”。 一般来说,任何一个十进制数”都可以采用并列表不法表不如下: N10=dn-1d n-2…d1d0. d-1d-2…d-m 其中,下标n表示整数部分的位数,下标m表示小数部分的位数,d是0~9中的某一个数,即di∈(0,1,…,9)。同样,任意一个十进制数N都可以用多项式表示法表示如下: N10=dn-1*10n-1+…+d1*101+d0*100+d-1*10-1+…+d-m*10m 其中,m、n为正整数,di 表示第i位的系数,10i 称为该位的权。所以某一位数的大小是由各系数项和其权值的乘积所决定的。 2、二进制(Binary) 二进制的基数是2,它只有两个数字符号,即0和1。计算规律是“逢二进一”或“借一当二”。例如: (101.01)2=1*23+1*22+0*21+1*20+0*2-1+1*2-2 任何一个二进制数N都可以用其多项式来表示: N2=dn-1*2n-1+dn-2*2n-2+…+d1*21+d0*20+d-1*2-1+d-2*2-2+…+d-m*2-m 式中任何一位数值的大小都可以用该位的系数项 di 和权值 2i 的积来确定。 3、十六进制(Hexadecimal) 十六进制的基数为16,它有16个数字符号、即0~9、A~F。其中 A、B、C、D、E、F 分别代表十进制数的10、11、12、13、14、15。各位之间“逢十六进一”或者“借一当十六”。各位的权值为 16i。例如: (2C7.1F)16=2*162+12*161+7*160+1*16-1+15*16-2 二、3种计数制之间的相互转换 对于同一个数,可以采用不同的计数制来表示,其形式也不同。如: (11)10=(1011)2=(B)16 1、R 进制转换成十进制的方法 具体的方法是先将其并列形式的数写成其多项式表示形式,然后,经计算后就可得到其十进制的结果。这种方法披称为按权展开法。对于一个任意的R进制数N都可以写成如下形式: N = dn-1 dn-2…d1 d0d-1d-2…d-m = dn-1*Rn-1+…+d1*R1+d0*R0+d-1*R-1+…+d-m*R-m 其中,R 为进位基数,Ri 是对应位的权值,di 为系数项,特此式求和计算之后,即可以完成 R 进制数对十进制数的转换。 例如,写出(1101.01)2、(10D)16的十进制数。 (1101.01)2=1*23+1*22+0*21+1*20+0*2-1+0*2-2 =8+4+1+0.25 =13.25 (10D)16=1*162+0*161+13*160 = 256+13 = 269 2、十进制转换成二进触方法 十进制数转换成二进制数一般分为两个步骤,即整数部分的转换和小数部分的转换。 (1)整数部分的转换 除2取余法:这种方法是由于 D10=N2=dn-1*2n-1+dn-2*2n-2+…d1*21+d0*20,所以具体方法是把给定的十进制整数除以2,取其余数作为二进制整数最低位的系数 do,然后继续将整数部分除以2,所得余数作为二进制整数次低位的系数 d1,一直重复下去,最后可以得到二进制整数部分。 例如,将(327)10转换成二进制数。 327 余数 各项系数 除以2= 163 ... 1 d0 ... 81 ... 1 d1 ... 40 ... 1 d2 ... 20 ... 0 d3 ... 10 ... 0 d4 ... 5 ... 0 d5 ... 2 ... 1 d6 ... 1 ... 0 d7 ... 0 ... 1 d8 所以,(327)10=d8 d7 d6 d5 d4 d3 d2d1 d0=(101000111)2。 此方法可扩展为陈 R 取余法。如将 R 设为16,则可将十进制整数转变为十六进制整数。 减权定位法:因为 D10=N2=dn-1*2n-1+dn-2*2n-2+…d1*21+d0*20,所以二进制多项式中的每一项都有自己的权值。若该项系数值为 di=0,则该项值为0,否则 di 应为1。根据这一对应关系,可提出减权定位的转换方法:将十进制数依次从二进制高位权值进行比较:若够减则对应位 di=1,减去该位权值后再往下比较;若不够减则对应值 di=0,越过该位与低一位的权值比较,如此进行直到余数为0为止。 例如,将(327)10转换成二进制数。因为512(29)> 327 > 256(28),所以从权值256对应值开始比较。 减权比较 di 位权 327-256=71 1 28 71<128 0 27 71-64=7 1 26 7<32 0 25 7<16 0 24 7<8 0 23 7-4=3 、 22 3-2=1 1 21 1-1=0 1 20 所以,(327)10=(101000111)2。 (2)小数部分的转换 转换的方法是采用乘2取整数表示法。由于 D10=d-1*2-1+d-2*2-2+…d-m*2-m,所以具体方法是把给定的十进制小数乘以2,取其整数部分作为二进制小数的小数点后的第一位系数;然后再将乘积的小数部分继续乘以2,取所得积的整数部分作为小数后的第二位系数;依次重复做下去,就可以得到二进制小数部分。 例如,将(0.8125) 10。转换成二进制小数。 整数部分 系数部分 2*0.8125=1.625 1 d-1=1 2*0.625=1.25 1 d-2=1 2*0.25=0.5 0 d-3=0 2*0.5=1.0 1 d-4=1 所以,(0.8125)10=d0 d-1 d-2 d-3 d-4=(0.1101)2。 在计算中可以按照所需的小数点位数,取其结果位近似值。 此方法可以扩展为乘R取整法.如将R变为16,则可将十进制小数部分直接变为十六进制小数。 3、二进制与十六进制的转换 (1)二进制转换成十六进制 4位二进制数的所有组合可表示十六进制数的16个代码,它们之间的对应关系如下: 二进制 0000 0001 0010 0011 0100 0101 0110 0111 十六进制 0 1 2 3 4 5 6 7 二进制 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 8 9 A B C D E F 进制转换的具体方法:从小数点开始,分别向左、向右,每4位二进制数为一组用十六进制数值来书写。若小数点左侧位数不是4的倍数,则最左侧用0补充;若小数点右侧位数不是4的倍数,则最右侧用0补充。 例如,(110110111.01101)2=(0001 1011 0111.0110 1000)2 =(1B7.68)16。 (2)十六进制转换成二进制 具体的转换方法是:将每个十六进制数用4位二进制数来书写,转化后最左侧或者最右侧的0在书写的时候可以省去。例如: (7AC.DE)16=(111 1010 1100.1101 111)2 例1:把(5/16)10转换成二进制数。 解:5/16=5×2-4=(101 2*(0.0001)2=(0.0101)2 小数点向左移4位等于乘以2-4。 例2:把(19.125) 10转换成二进制数、十六进制数。 解:首先把整数部分(19)10转换成二进制数: (19)10=16+2+1=24+21+20=(10011)2 再把小数部分(0.125)10转换成二进制数: 0.125*2=0.25 0 0.25*2=0.5 0 0.5*2=1 1 所以,(0.125)10=(0.001) 2。 把整数与小数部分合起来结果为 (19.125)10=(10011.001)2=(13.2)16

liujae 2019-12-02 01:28:37 0 浏览量 回答数 0

试用中心

为您提供0门槛上云实践机会,企业用户最高免费12个月

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:57 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:58 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:59 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:58 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:58 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 ABS 命令格式如下: Double abs(Double number) Bigint abs(Bigint number) Decimal abs(Decimal number) 命令说明如下: 该函数用于返回number的绝对值。 参数说明: number:当number为Double、Bigint或Decimal类型时。 输入为Bigint,返回Bigint。 输入为Double,返回Double类型。 输入为Decimal,返回Decimal类型。 若输入为String类型,会隐式转换为Double类型后参与运算,其它类型抛异常。 返回值: 返回Double、Bigint或Decimal类型,取决于输入参数的类型。若输入为null,则返回null。 说明 当输入Bigint类型的值超过Bigint的最大表示范围时,会返回Double类型,这种情况下可能会损失精度。 示例如下: abs(null)=null abs(-1)=1 abs(-1.2)=1.2 abs("-2")=2.0 abs(122320837456298376592387456923748)=1.2232083745629837e32 下面是一个完整的ABS函数在SQL中使用的示例,其他内建函数(除窗口函数、聚合函数外)的使用方式与其类似,不再举例。 select abs(id) from tbl1; -- 取tbl1表内id字段的绝对值 ACOS 命令格式如下: Double acos(Double number) Decimal acos(Decimal number) 命令说明如下: 该函数用于计算number的反余弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在0 ~ π之间。若number为null,则返回null。 示例如下: acos("0.87")=0.5155940062460905 acos(0)=1.5707963267948966 ASIN 命令格式如下: Double asin(Double number) Decimal asin(Decimal number) 命令说明如下: 该函数用于计算number的反正弦函数。 参数说明: number:Double类型或Decimal类型,-1 ≤ number ≤1。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型,值域在-π/2 ~π/2之间。若number为null,返回null。 示例如下: asin(1)=1.5707963267948966 asin(-1)=-1.5707963267948966 ATAN 命令格式如下: Double atan(Double number) 命令说明如下: 该函数用于计算number的反正切函数。 参数说明: number:Double类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型,值域在-π/2~π/2之间。若number为null,则返回null。 示例如下: atan(1)=0.7853981633974483 atan(-1)=-0.7853981633974483 CEIL 命令格式如下: Bigint ceil(Double value) Bigint ceil(Decimal value) 命令说明如下: 向上取整,函数返回不小于输入值value的最小整数。 参数说明: value:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。任意一个参数输入为null,则返回null。 示例如下: ceil(1.1)=2 ceil(-1.1)=-1 CONV 命令格式如下: String conv(String input, Bigint from_base, Bigint to_base) 命令说明如下: 该函数为进制转换函数。 参数说明: input:以String表示的要转换的整数值,接受Bigint、Double的隐式转换。 from_base、to_base:以十进制表示的进制的值,可接受的的值为2、8、10和16。接受String及Double的隐式转换。 返回值: 返回String类型。任意一个参数输入为null,返回null。转换过程以64位精度工作,溢出时报异常。输入如果是负值,即以(-)开头,报异常。如果输入的是小数,则会转为整数值后进行进制转换,小数部分会被舍弃。 示例如下: conv('1100', 2, 10)='12' conv('1100', 2, 16)='c' conv('ab', 16, 10)='171' conv('ab', 16, 16)='ab' COS 命令格式如下: Double cos(Double number) Decimal cos(Decimal number) 命令说明如下: 该函数用于计算number的余弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换到Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 示例如下: cos(3.1415926/2)=2.6794896585028633e-8 cos(3.1415926)=-0.9999999999999986 COSH 命令格式如下: Double cosh(Double number) Decimal cosh(Decimal number) 命令说明如下: 该函数用于计算number的双曲余弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后,参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,返回null。 COT 命令格式如下: Double cot(Double number) Decimal cot(Decimal number) 命令说明如下: 该函数用于计算number的余切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 EXP 命令格式如下: Double exp(Double number) Decimal exp(Decimal number) 命令说明如下: 该函数用于计算number的指数函数。 返回值: 返回number的指数值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 FLOOR 命令格式如下: Bigint floor(Double number) Bigint floor(Decimal number) 命令说明如下: 向下取整,函数返回不大于number的最大整数值。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Bigint类型。若number为null,则返回null。 示例如下: floor(1.2)=1 floor(1.9)=1 floor(0.1)=0 floor(-1.2)=-2 floor(-0.1)=-1 floor(0.0)=0 floor(-0.0)=0 LN 命令格式如下: Double ln(Double number) Decimal ln(Decimal number) 命令说明如下: 该函数用于返回number的自然对数。 参数说明: number:Double类型或Decimal类型。 若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 若number为null,则返回null。若number为负数或零,则执行报错。 返回值: 返回Double类型或Decimal类型。 LOG 命令格式如下: Double log(Double base, Double x) Decimal log(Decimal base, Decimal x) 命令说明如下: 该函数用于返回以base为底的x的对数。 参数说明: base:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 x:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型的对数值。 若base和x中存在null,则返回null。 若base和x中某一个值为负数或 0,会引发异常。 若base为1(会引发一个除零行为),也会引发异常。 POW 命令格式如下: Double pow(Double x, Double y) Decimal pow(Decimal x, Decimal y) 命令说明如下: 该函数用于返回x的y次方,即x^y。 参数说明: X:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Y:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若x或y为null,则返回null。 RAND 命令格式如下: Double rand(Bigint seed) 命令说明如下: 该函数以seed为种子,返回Double类型的随机数,返回值区间是的0~1。 参数说明: seed:可选参数,Bigint类型,随机数种子,决定随机数序列的起始值。 返回值: 返回Double类型。 示例如下: select rand() from dual; select rand(1) from dual; ROUND 命令格式如下: Double round(Double number, [Bigint Decimal_places]) Decimal round(Decimal number, [Bigint Decimal_places]) 命令说明如下: 该函数四舍五入到指定小数点位置。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_place:Bigint类型常量,四舍五入计算到小数点后的位置,其他类型参数会引发异常。如果省略表示四舍五入到个位数,默认值为0。 返回值: 返回Double类型或Decimal类型。若number或Decimal_places为null,则返回null。 说明 Decimal_places可以是负数。负数会从小数点向左开始计数,并且不保留小数部分。如果Decimal_places超过了整数部分长度,返回0。 示例如下: round(125.315)=125.0 round(125.315, 0)=125.0 round(125.315, 1)=125.3 round(125.315, 2)=125.32 round(125.315, 3)=125.315 round(-125.315, 2)=-125.32 round(123.345, -2)=100.0 round(null)=null round(123.345, 4)=123.345 round(123.345, -4)=0.0 SIN 命令格式如下所示: Double sin(Double number) Decimal sin(Decimal number) 命令说明如下: 该函数用于计算number的正弦函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SINH 命令格式如下: Double sinh(Double number) Decimal sinh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正弦函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 SQRT 命令格式如下: Double sqrt(Double number) Decimal sqrt(Decimal number) 命令说明如下: 该函数用于计算number的平方根。 参数说明: number:Double类型或Decimal类型,必须大于0,小于0时引发异常。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TAN 命令说明如下: Double tan(Double number) Decimal tan(Decimal number) 命令说明如下: 该函数用于计算number的正切函数,输入为弧度值。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TANH 命令格式如下: Double tanh(Double number) Decimal tanh(Decimal number) 命令说明如下: 该函数用于计算number的双曲正切函数。 参数说明: number:Double类型或Decimal类型。若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 返回值: 返回Double类型或Decimal类型。若number为null,则返回null。 TRUNC 命令格式如下: Double trunc(Double number[, Bigint Decimal_places]) Decimal trunc(Decimal number[, Bigint Decimal_places]) 命令说明如下: 该函数用于将输入值number截取到指定小数点位置。 参数说明: number:Double类型或Decimal类型,若输入为String类型或Bigint类型,会隐式转换为Double类型后参与运算,其他类型抛异常。 Decimal_places:Bigint类型常量,要截取到的小数点位置,其他类型参数会隐式转为Bigint,省略此参数时默认到截取到个位数。 返回值: 返回值类型为Double或Decimal类型。若number或Decimal_places为null,则返回null。 说明 返回Double类型时,返回的结果的显示可能不符合预期,如示例trunc(125.815, 1)(这个Double类型显示问题任何系统都存在)。 截取掉的部分补0。 Decimal_places可以是负数,负数会从小数点向左开始截取,并且不保留小数部分。如果Decimal_places超过了整数部分长度,则返回0。 示例如下: trunc(125.815)=125.0 trunc(125.815,0)=125.0 trunc(125.815,1)=125.80000000000001 trunc(125.815,2)=125.81 trunc(125.815,3)=125.815 trunc(-125.815,2)=-125.81 trunc(125.815,-1)=120.0 trunc(125.815,-2)=100.0 trunc(125.815,-3)=0.0 trunc(123.345,4)=123.345 trunc(123.345,-4)=0.0 MaxCompute2.0扩展函数 升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句: set odps.sql.type.system.odps2=true; 下文将为您详细介绍新扩展的函数。 LOG2 命令格式如下: Double log2(Double number) Double log2(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以2为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log2(null)=null log2(0)=null log2(8)=3.0 LOG10 命令格式如下: Double log10(Double number) Double log10(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于以10为底,返回number的对数。 参数说明: number:Double或Decimal类型。 返回值: 返回Double类型。若输入为0或null,则返回null。 示例如下: log10(null)=null log10(0)=null log10(8)=0.9030899869919435 BIN 命令格式如下: String bin(Bigint number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的二进制代码表示。 参数说明: number:Bigint类型。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回null。 示例如下: bin(0)='0' bin(null)='null' bin(12)='1100' HEX 命令格式如下: String hex(Bigint number) String hex(String number) String hex(BINARY number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将整数或字符转换为十六进制格式。 参数说明: number:如果number是Bigint类型,那么返回number的十六进制表示。如果变量是String类型,则返回该字符串的十六进制表示。 返回值: 返回String类型。若输入为0,返回0,输入为null,则返回异常。 示例如下: hex(0)=0 hex('abc')='616263' hex(17)='11' hex('17')='3137' hex(null)异常返回失败 说明 当输入参数为Binary类型时,请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 UNHEX 命令格式如下: BINARY unhex(String number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回十六进制字符串所代表的字符串。 参数说明: number:为十六进制字符串。 返回值: 返回Binary类型,若输入0,返回失败,若输入为null,则返回null。 示例如下: unhex('616263')='abc' unhex(616263)='abc' RADIANS 命令格式如下: Double radians(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将角度转换为弧度。 参数说明: number:Double类型数据。 返回值: 返回Double类型,若输入为null,返回null。 示例如下: radians(90)=1.5707963267948966 radians(0)=0.0 radians(null)=null DEGREES 命令格式如下: Double degrees(Double number) Double degrees(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于将弧度转换为角度。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入null,则返回null。 示例如下: degrees(1.5707963267948966)=90.0 degrees(0)=0.0 degrees(null)=null SIGN 命令格式如下: Double sign(Double number) Double sign(Decimal number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于取输入数据的符号,1.0表示正,-1.0表示负,否则0.0。 参数说明: number:Double或Decimal类型数据。 返回值: 返回Double类型,若输入0,则返回0.0,输入为null,则返回null。 示例如下: sign(-2.5)=-1.0 sign(2.5)=1.0 sign(0)=0.0 sign(null)=null E 命令格式如下: Double e() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回e的值。 返回值: 返回Double类型。 示例如下: e()=2.718281828459045 PI 命令格式如下: Double pi() 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回π的值。 返回值: 返回Double类型。 示例如下: pi()=3.141592653589793 FACTORIAL 命令格式如下: Bigint factorial(Int number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于返回number的阶乘。 参数说明: number:Int类型数据,且在[0..20]之间。 返回值: 返回Bigint类型,输入为0,则返回1,输入为null或[0..20]之外的值,返回null。 示例如下: factorial(5)=120 --5!=5*4*3*2*1=120 CBRT 命令格式如下: Double cbrt(Double number) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于计算number的立方根。 参数说明: number:Double类型数据。 返回值: 返回Double类型,输入为null,返回null。 示例如下: cbrt(8)=2 cbrt(null)=null SHIFTLEFT 命令格式如下: Int shiftleft(Tinyint|Smallint|Int number1, Int number2) Bigint shiftleft(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位左移(<<)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bingint类型。 示例如下: shiftleft(1,2)=4 --1的二进制左移2位(1<<2,0001左移两位是0100) shiftleft(4,3)=32 --4的二进制左移3位(4<<3,0100左移3位是100000) SHIFTRIGHT 命令格式如下: Int shiftright(Tinyint|Smallint|Int number1, Int number2) Bigint shiftright(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于按位右移(>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftright(4,2)=1 -- 4的二进制右移2位(4>>2,0100右移两位是0001) shiftright(32,3)=4 -- 32的二进制右移3位(32>>3,100000右移3位是0100) SHIFTRIGHTUNSIGNED 命令格式如下: Int shiftrightunsigned(Tinyint|Smallint|Int number1, Int number2) Bigint shiftrightunsigned(Bigint number1, Int number2) 说明 请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。 命令说明如下: 该函数用于无符号按位右移(>>>)。 参数说明: number1:Tinyint|Smallint|Int|Bigint整型数据。 number2:Int整型数据。 返回值: 返回Int或Bigint类型。 示例如下: shiftrightunsigned(8,2)=2 --8的二进制无符号右移2位(8>>>2,1000右移两位是0010) shiftrightunsigned(-14,2)=1073741820 -- -14的二进制右移2位(-14>>>2, 11111111 11111111 11111111 11110010右移2位是 00111111 11111111 11111111 11111100)

2019-12-01 23:10:59 0 浏览量 回答数 0

问题

MaxCompute用户指南:SQL:内建函数:数学函数

行者武松 2019-12-01 22:02:58 1409 浏览量 回答数 0

问题

【精品问答】Python实战100例 - 附源码

珍宝珠 2019-12-01 22:01:18 7689 浏览量 回答数 8

回答

1 js 的基本数据类型? 2 JavaScript 有几种类型的值? 3 什么是堆?什么是栈?它们之间有什么区别和联系? 4 内部属性 [Class] 是什么? 5 介绍 js 有哪些内置对象? 6 undefined 与 undeclared 的区别? 7 null 和 undefined 的区别? 8 如何获取安全的 undefined 值? 9 说几条写 JavaScript 的基本规范? 10 JavaScript 原型,原型链? 有什么特点? 11 js 获取原型的方法? 12 在 js 中不同进制数字的表示方式? 13 js 中整数的安全范围是多少? 14 typeof NaN 的结果是什么? 15 isNaN 和 Number.isNaN 函数的区别? 16 Array 构造函数只有一个参数值时的表现? 17 其他值到字符串的转换规则? 18 其他值到数字值的转换规则? 19 其他值到布尔类型的值的转换规则? 20 {} 和 [] 的 valueOf 和 toString 的结果是什么? 21 什么是假值对象? 22 ~ 操作符的作用? 23 解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字,它们之间的区别是什么? 24 + 操作符什么时候用于字符串的拼接? 25 什么情况下会发生布尔值的隐式强制类型转换? 26 || 和 && 操作符的返回值? 27 Symbol 值的强制类型转换? 28 == 操作符的强制类型转换规则? 29 如何将字符串转化为数字,例如 '12.3b'? 30 如何将浮点数点左边的数每三位添加一个逗号,如 12000000.11 转化为『12,000,000.11』? 31 常用正则表达式? 32 生成随机数的各种方法? 33 如何实现数组的随机排序? 34 javascript 创建对象的几种方式? 35 JavaScript 继承的几种实现方式? 36 寄生式组合继承的实现? 37 Javascript 的作用域链? 38 谈谈 This 对象的理解。 39 eval 是做什么的? 40 什么是 DOM 和 BOM? 41 写一个通用的事件侦听器函数。 42 事件是什么?IE 与火狐的事件机制有什么区别? 如何阻止冒泡? 43 三种事件模型是什么? 44 事件委托是什么? 45 ['1', '2', '3'].map(parseInt) 答案是多少? 46 什么是闭包,为什么要用它? 47 javascript 代码中的 'use strict'; 是什么意思 ? 使用它区别是什么? 48 如何判断一个对象是否属于某个类? 49 instanceof 的作用? 50 new 操作符具体干了什么呢?如何实现? 51 Javascript 中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是? 52 对于 JSON 的了解? 53 [].forEach.call($$(''),function(a){a.style.outline='1px solid #'+(~~(Math.random()(1<<24))).toString(16)}) 能解释一下这段代码的意思吗? 54 js 延迟加载的方式有哪些? 55 Ajax 是什么? 如何创建一个 Ajax? 56 谈一谈浏览器的缓存机制? 57 Ajax 解决浏览器缓存问题? 58 同步和异步的区别? 59 什么是浏览器的同源政策? 60 如何解决跨域问题? 61 服务器代理转发时,该如何处理 cookie? 62 简单谈一下 cookie ? 63 模块化开发怎么做? 64 js 的几种模块规范? 65 AMD 和 CMD 规范的区别? 66 ES6 模块与 CommonJS 模块、AMD、CMD 的差异。 67 requireJS 的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何 缓存的?) 68 JS 模块加载器的轮子怎么造,也就是如何实现一个模块加载器? 69 ECMAScript6 怎么写 class,为什么会出现 class 这种东西? 70 documen.write 和 innerHTML 的区别? 71 DOM 操作——怎样添加、移除、移动、复制、创建和查找节点? 72 innerHTML 与 outerHTML 的区别? 73 .call() 和 .apply() 的区别? 74 JavaScript 类数组对象的定义? 75 数组和对象有哪些原生方法,列举一下? 76 数组的 fill 方法? 77 [,,,] 的长度? 78 JavaScript 中的作用域与变量声明提升? 79 如何编写高性能的 Javascript ? 80 简单介绍一下 V8 引擎的垃圾回收机制 81 哪些操作会造成内存泄漏? 82 需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案? 83 如何判断当前脚本运行在浏览器还是 node 环境中?(阿里) 84 把 script 标签放在页面的最底部的 body 封闭之前和封闭之后有什么区别?浏览器会如何解析它们? 85 移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时? 86 什么是“前端路由”?什么时候适合使用“前端路由”?“前端路由”有哪些优点和缺点? 87 如何测试前端代码么? 知道 BDD, TDD, Unit Test 么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)? 88 检测浏览器版本版本有哪些方式? 89 什么是 Polyfill ? 90 使用 JS 实现获取文件扩展名? 91 介绍一下 js 的节流与防抖? 92 Object.is() 与原来的比较操作符 '==='、'==' 的区别? 93 escape,encodeURI,encodeURIComponent 有什么区别? 94 Unicode 和 UTF-8 之间的关系? 95 js 的事件循环是什么? 96 js 中的深浅拷贝实现? 97 手写 call、apply 及 bind 函数 98 函数柯里化的实现 99 99. 为什么 0.1 + 0.2 != 0.3?如何解决这个问题? 100 原码、反码和补码的介绍 101 toPrecision 和 toFixed 和 Math.round 的区别? 102 什么是 XSS 攻击?如何防范 XSS 攻击? 103 什么是 CSP? 104 什么是 CSRF 攻击?如何防范 CSRF 攻击? 105 什么是 Samesite Cookie 属性? 106 什么是点击劫持?如何防范点击劫持? 107 SQL 注入攻击? 108 什么是 MVVM?比之 MVC 有什么区别?什么又是 MVP ? 109 vue 双向数据绑定原理? 110 Object.defineProperty 介绍? 111 使用 Object.defineProperty() 来进行数据劫持有什么缺点? 112 什么是 Virtual DOM?为什么 Virtual DOM 比原生 DOM 快? 113 如何比较两个 DOM 树的差异? 114 什么是 requestAnimationFrame ? 115 谈谈你对 webpack 的看法 116 offsetWidth/offsetHeight,clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别? 117 谈一谈你理解的函数式编程? 118 异步编程的实现方式? 119 Js 动画与 CSS 动画区别及相应实现 120 get 请求传参长度的误区 121 URL 和 URI 的区别? 122 get 和 post 请求在缓存方面的区别 123 图片的懒加载和预加载 124 mouseover 和 mouseenter 的区别? 125 js 拖拽功能的实现 126 为什么使用 setTimeout 实现 setInterval?怎么模拟? 127 let 和 const 的注意点? 128 什么是 rest 参数? 129 什么是尾调用,使用尾调用有什么好处? 130 Symbol 类型的注意点? 131 Set 和 WeakSet 结构? 132 Map 和 WeakMap 结构? 133 什么是 Proxy ? 134 Reflect 对象创建目的? 135 require 模块引入的查找方式? 136 什么是 Promise 对象,什么是 Promises/A+ 规范? 137 手写一个 Promise 138 如何检测浏览器所支持的最小字体大小? 139 怎么做 JS 代码 Error 统计? 140 单例模式模式是什么? 141 策略模式是什么? 142 代理模式是什么? 143 中介者模式是什么? 144 适配器模式是什么? 145 观察者模式和发布订阅模式有什么不同? 146 Vue 的生命周期是什么? 147 Vue 的各个生命阶段是什么? 148 Vue 组件间的参数传递方式? 149 computed 和 watch 的差异? 150 vue-router 中的导航钩子函数 151 两个router 的区别? 152 vue 常用的修饰符? 153 computed 和 watch 区别? 154 keep-alive 组件有什么作用? 155 vue 中 mixin 和 mixins 区别? 156 开发中常用的几种 Content-Type ? 157 如何封装一个 javascript 的类型判断函数? 158 如何判断一个对象是否为空对象? 159 使用闭包实现每隔一秒打印 1,2,3,4 160 手写一个 jsonp 161 手写一个观察者模式? 162 EventEmitter 实现 163 一道常被人轻视的前端 JS 面试题 164 如何确定页面的可用性时间,什么是 Performance API? 165 js 中的命名规则 166 js 语句末尾分号是否可以省略? 167 Object.assign() 168 Math.ceil 和 Math.floor 169 js for 循环注意点 170 一个列表,假设有 100000 个数据,这个该怎么办? 171 js 中倒计时的纠偏实现? 172 进程间通信的方式? 173 如何查找一篇英文文章中出现频率最高的单词? 174 174道 JavaScript 面试题,合集

剑曼红尘 2020-04-02 14:05:35 0 浏览量 回答数 0

问题

【精品问答】Python二级考试题库

珍宝珠 2019-12-01 22:03:38 1146 浏览量 回答数 2

回答

本文主要介绍签名机制。 签名机制说明 Access Key ID 和 Access Key Secret 由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中 Access Key ID 用于标识访问者的身份;Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。 容器服务会对每个访问的请求进行验证,每个向容器服务提交的请求,都需要在请求中包含签名(Signature)信息。容器服务通过使用 Access Key ID 和 Access Key Secret 进行对称加密的方法来验证请求的发送者身份。如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,容器服务将拒绝处理这次请求,并返回 HTTP 403 错误。 用户可以在 HTTP 请求中增加授权(Authorization)的 Head 来包含签名信息,表明这个消息已被授权。 容器服务要求将签名包含在 HTTP Header 中,格式为 Authorization: acs [Access Key Id]:[Signature]。 Signature 的计算方法如下: Signature = base64(hmac-sha1(VERB + "\n" + ACCEPT + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedHeaders + "\n" + CanonicalizedResource)) VERB 表示 HTTP 的 Method。例如示例中的 PUT。 Accept 客户端需要的返回值类型,支持 application/json 和 application/xml。 Content-MD5 表示请求内容数据的 MD5 值。 Content-Type 表示请求内容的类型。 Date 表示此次操作的时间,不能为空,目前只支持 GMT 格式。如果请求时间与 CAS 服务器时间相差超过 15分钟,CAS 会判定此请求不合法,并返回 400 错误。错误信息及错误码详见本文档第 5 部分。例如示例中的 Thu, 17 Mar 2012 18:49:58 GMT。 CanonicalizedHeaders 表示 HTTP 中以 x-acs- 开始的字段组合。 CanonicalizedResource 表示 HTTP 所请求资源的 URI(统一资源标识符)。例如示例中的 /clusters?name=my-clusters&resource=new。 说明 CanonicalizedHeaders(即以 x-acs- 开头的 header)在签名验证前需要符合以下规范: 将所有以 x-acs- 为前缀的 HTTP 请求头的名字转换成小写字母。例如将 X-ACS-Meta-Name: TaoBao 转换为 x-acs-meta-name: TaoBao。阿里云规范请求头的名字是大小写不敏感的,建议全部使用小写。 如果一个公共请求头的值部分过长,则需要处理其中的 \t、\n、\r、\f分隔符,将其替换为英文半角的空格。 将上一步得到的所有 HTTP 阿里云规范头按照字典序进行升序排列。 删除请求头和内容之间分隔符两端出现的任何空格。例如将 x-acs-meta-name: TaoBao,Alipay 转换为 x-acs-meta-name:TaoBao,Alipay。 将所有的头和内容用 \n 分隔符分隔拼成最后的 CanonicalizedHeaders。 说明 CanonicalizedResource 的格式规范:CanonicalizedResource 表示客户想要访问资源的规范描述,需要将子资源和 qurey 一同按照字典序,从小到大排列并以 & 为分隔符生成子资源字符串(? 后的所有参数)。 http://cs.aliyuncs.com/clusters?name=my-clusters&resource=new CanonicalizedResource 应该为: /clusters?name=my-clusters&resource=new 签名示例 您可以通过该示例,了解加签的步骤。 示例使用的 accessKeyId 和 accessKeySecret 分别为 access_key_id 和 access_key_secret。推荐您使用自己的 OpenAPI 调用程序,来计算下面这个示例的加签串,您自己的加签结果和示例结果。 请求的示例如下: POST http://cs.aliyuncs.com/clusters?param1=value1&param2=value2 HTTP/1.1 Accept-Encoding: identity Content-Length: 210 Content-MD5: 6U4ALMkKSj0PYbeQSHqgmA== x-acs-version: 2015-12-15 Accept: application/json User-Agent: cs-sdk-python/0.0.1 (Darwin/15.2.0/x86_64;2.7.10) x-acs-signature-nonce: fbf6909a-93a5-45d3-8b1c-3e03a7916799 x-acs-signature-version: 1.0 Date: Wed, 16 Dec 2015 12:20:18 GMT x-acs-signature-method: HMAC-SHA1 Content-Type: application/json;charset=utf-8 X-Acs-Region-Id: cn-beijing Authorization: acs : {"password": "Just$ ","instance_type": "ecs.m2.medium","name": "my-test-cluster-9708","size": 1,"network_mode": "vpc","data_disk_category": "cloud","data_disk_size": 10,"ecs_image_id": "m-253l****l"} 请求构造过程 计算 Content-Length 和 Content-MD5 Content-Length 说明 示例 body 首位没有空格或换行符。 body: {"password": "Just$","instance_type": "ecs.m2.medium","name": "my-test-cluster-9708","size": 1,"network_mode": "vpc","data_disk_category": "cloud","data_disk_size": 10,"ecs_image_id": "m-253ll****"} Content-Length: 210 Content-MD5 body: {"password": "Just$","instance_type": "ecs.m2.medium","name": "my-test-cluster-9708","size": 1,"network_mode": "vpc","data_disk_category": "cloud","data_disk_size": 10,"ecs_image_id": "m-253ll****"} 计算 body 的 md5 值 md5(body): e94e002cc90a4a3d0f61b790487aa098 将 md5 值转化成字节数组。将 md5 中的每两个十六进制位合并,转化为一个字节。 例如:e9 -> 11111111111111111111111111101001 -> -23 bytes(md5(body)): {[-23], [78], [0], [44], [-55], [10], [74], [61], [15], [97], [-73], [-112], [72], [122], [-96], [-104]} 将得到的字节数组做一个 base64 转换 base64(bytes(md5(body))): 6U4ALMkKSj0PYbeQSHqgmA== Content-MD5: 6U4ALMkKSj0PYbeQSHqgmA== 处理 CanonicalizedHeaders 将所有以‘x-acs-’开头的头部列出来 x-acs-version: 2015-12-15 x-acs-signature-nonce: ca480402-7689-43ba-acc4-4d2013d9d8d4 x-acs-signature-version: 1.0 x-acs-signature-method: HMAC-SHA1 X-Acs-Region-Id: cn-beijing 将请求名字变成小写,去掉每一行首尾的空格,并按照字典序进行排序。删除请求头和内容之间分隔符两端出现的任何空格。 注意:最后一行没有换行符。 x-acs-region-id:cn-beijing x-acs-signature-method:HMAC-SHA1 x-acs-signature-nonce:fbf6909a-93a5-45d3-8b1c-3e03a7916799 x-acs-signature-version:1.0 x-acs-version:2015-12-15 计算 CanonicalizedResource 示例得到的 CanonicalizedResource,长度应该为 27。 说明 第一行行尾有一个 \n 的换行符。 /clusters?param1=value1&param2=value2 计算 Signature 组装 SignatureString。示例中的加签字符串的长度为 307。除最后一行外,每一行行尾均有一个\n的换行符。 POST application/json 6U4ALMkKSj0PYbeQSHqgmA== application/json;charset=utf-8 Wed, 16 Dec 2015 12:20:18 GMT x-acs-region-id:cn-beijing x-acs-signature-method:HMAC-SHA1 x-acs-signature-nonce:fbf6909a-93a5-45d3-8b1c-3e03a7916799 x-acs-signature-version:1.0 x-acs-version:2015-12-15 /clusters?param1=value1&param2=value2 计算 Signature 使用 accessKeySecret 来对加签字符串进行加密,其中示例使用的 accessKeySecret 是 access_key_secret。 hmac-sha1(SignatureString): fee03d405e421ebaf514adec881038c4b313584d 类似于 Content-MD5 的计算方式,将得到的加密串转化成字节数组。 将得到的字符数组做一个 base64 转换。得到最后的签名串。 base64(bytes(hmac-sha1(SignatureString))): ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA== Signature: ZmVlMDNkNDA1ZTQyMWViYWY1MTRhZGVjODgxMDM4YzRiMzEzNTg0ZA== 经过以上的处理,添加一些其他头部信息,最终构成的 HTTP 请求如下所示。 POST http://cs.aliyuncs.com/clusters?param1=value1&param2=value2 HTTP/1.1 Accept-Encoding: identity Content-Length: 210 Content-MD5: 6U4ALMkKSj0PYbeQSHqgmA== x-acs-version: 2015-12-15 Accept: application/json User-Agent: cs-sdk-python/0.0.1 (Darwin/15.2.0/x86_64;2.7.10) x-acs-signature-nonce: fbf6909a-93a5-45d3-8b1c-3e03a7916799 x-acs-signature-version: 1.0 Date: Wed, 16 Dec 2015 12:20:18 GMT x-acs-signature-method: HMAC-SHA1 Content-Type: application/json;charset=utf-8 X-Acs-Region-Id: cn-beijing Authorization: acs : {"password": "Just$ ","instance_type": "ecs.m2.medium","name": "my-test-cluster-9708","size": 1,"netwo

1934890530796658 2020-03-31 20:58:05 0 浏览量 回答数 0

问题

Swarm API参考&nbsp;&nbsp;集群API调用方式&nbsp;&nbsp;签名机制

青蛙跳 2019-12-01 21:37:58 980 浏览量 回答数 0

回答

数据库课程设计 “数据库课程设计”是数据库系统及应用课程的后续实验课,是进一步巩固学生的数据库知识,加强学生的实际动手能力和提高学生综合素质。 一、 课程设计目的 课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的: 1. 加深对数据库原理、程序设计语言的理论知识的理解和应用水平; 2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高; 3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力; 4. 为毕业设计和以后工作打下必要基础。 二、课程设计要求 运用数据库原理的基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。 1. 用E-R图设计选定题目的信息模型; 2. 设计相应的关系模型,确定数据库结构; 3. 分析关系模式各属于第几范式,阐明理由; 4. 设计应用系统的系统结构图,确定系统功能; 5. 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制; 6. 为参照关系设计插入、删除、修改触发器; 7. 实现应用程序设计、编程、优化功能; 8. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求; 9. 分析遇到的问题,总结并写出课程设计报告; 10. 自我评价 三、实验环境 开发环境VC++、C#、ASP或JAVA;ODBC/JDBC;数据库SQL Server 四、上机实现内容 1. 创建数据库的结构 2. 创建各基本表的结构 3. 编制系统各功能模块,完成数据的管理(增、删、改)及统计查询。对于程序运行界面不做考核的重点。 五、课程设计考核 1.对学生到实验室的情况进行不定时统计; 2.出勤率+课程设计报告+课程设计所开发的应用系统+其他(上机抽查和提问)=综合评定成绩。 3.课程设计结束时请将下列资料上交: (1) 课程设计报告; (2) 所开发的应用系统的源程序、安装和使用说明; (3) 将(1)(2)中的资料压缩成一个压缩包,压缩包文件的命名规则:班级+学号(末2位)+姓名(例如:计科090101王鹏晓); (4) 班长将本班每人的(3)中的压缩包刻录成光盘连同打印的课程设计报告收齐,交给任课教师。 附录﹑课程设计题目 题目1:课程设计选题管理系统(1,24) 包括三大模块:  课程设计题目维护与查询:题目的添加、修改和删除;按题目类型、名称和关键字查询以及已选与未选题目的查询;  学生信息维护与查询;  学生选题维护与管理:学生选题及查询; 具体功能细化:  前台学生选题:学生上网登录系统进行选题;  前台教师出题:  教师添加、修改和删除题目;  教师确认学生的选题;  后台管理出题和选题  添加用户及权限 题目2:书店管理系统(23) 包括四大模块:  售书(图书销售管理及销售统计,查询)  进书(通过书目,向发行商下定单订购图书)  库存(图书库存,统计)  相关查询 题目3:图书馆管理系统(11) 包括四大模块:  图书的查询  借书  还书  图书的预约 题目4:库存管理系统(8) 包括四大模块:  商品目录建立  商品入库管理  商品出库管理  商品库存查询 题目5:工资管理系统(1 人)41 包括四大模块:  系统数据初始化  员工基本信息数据的输入、修改、删除;  员工个人信息及工资表的查询;  员工工资的计算; 参考数据如下:  员工基本状况:包括员工号、员工姓名、性别、所在部门、工资级别、工资等级等。  工资级别和工资金额:包括工资等级、工资额。  企业部门及工作岗位信息:包括部门名称、工作岗位名称、工作岗位工资等。  工龄和工资金额:包括工龄及对应工资额。  公司福利表:包括福利名称、福利值。  工资信息:包括员工号、员工姓名、员工基础工资、员工岗位工资、员工工龄工资、公司福利、员工实得工资。 题目6:酒店客房管理系统 (1 人)14,26 包括四大模块:  前台操作:包括开房登记、退房结账和房状态查看  预订管理:包括预订房间、预订入住和解除预订  信息查询:包括在住客人列表、预订客人列表和历史客人列表  报表统计:包括开房记录统计、退房结账和预订房间统计  员工基本信息数据的输入、修改、删除; 参考数据如下:  住店管理:客人姓名、证件号码、房号、入住时期、预计离开日期、结账离开日期、应付金额  客人信息:姓名、性别、证件类型、证件号码、联系电话  房间信息:房号、房类型、价格、押金、房状态 预订房间  客人姓名、性别、房类型、房号、价格、证件类型、证件号码、联系电话、入住日期、预计离开日期、历史信息 题目7:旅行社管理信息系统(1 人)3 包括如下模块:  旅游团队、团队团员及旅游路线相关信息的输入  旅游团队、团队团员及旅游路线相关信息的维护(修改、浏览、删除和撤销)  旅游团队管理信息的查询(如按团队编号)  团队团员基本情况的查询(可选多种方式)  旅游路线相关信息的查询(如按线路编号)  旅游路线排行榜发布。  数据备份,更改密码。 参考数据如下:  团员信息表(路线编号,团队编号,团员编号,姓名,性别,电话,通信地址,身份证号码, 团费交否,备注)  线路信息表(路线名称,团费,简介,图形,路线编号)  团队信息表(团队编号,路线编号,团员人数,出发日期,返程日期)  旅游团队信息表(团队编号,团队负责人,团员人数,建团时间,是否出发,团费,盈亏) 密码信息(操作员,密码) 题目8:报刊订阅管理系统 (1 人)25,35 包括如下模块:  登录功能:登录统为身份验证登录。分为管理员登录和一般用户登录。分别通过不 同的用户名和密码进入报刊订阅管理界面,新的用户需要注册。  录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦 提交就存入到后台数据库中;普通用户自行注册进行可以修改个人信息。  订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不 可订阅报刊,必须以用户身份订阅报刊。  查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门 分类查询。查询出的信息显示在界面上,并且可以预览和打印出结果。  统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订 阅信息进行统计;普通用户可以统计出自己的订阅情况,并且可以预览和打印出结果。  系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢 复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和 数据的安全性,有利于系统的维护 参考数据如下:  管理员表(Adminuser) :管理员名、密码。  部门表(Department) :部门号,部门名。  用户表(Users) :用户账号、密码、真实姓名、身 份证号、联系电话,联系地址,部门号(和部门表有关)等。  报刊类别表(NewspaperClass) :分类编号、 分类名称。  报刊信息表(Newspaper) :报刊代号、报刊名称、出版 报社、出版周期、季度报价、内容介绍、分类编号(和报刊类别表有关)等。  订单表(Order) :订单编号、用户编号、报刊代号、订阅份数、订阅月数等。 题目9:计算机等级考试教务管理系统(2 人)32 包括四大模块:  用户设置:对考点代码,考点名称进行设置,设置用户与密码;系统复位:即清除上一次考试数据(在之前存入历史)  报名管理: 报各库录入(姓名不能不空,之间不能有空格) 增加、删除、修改、浏览  准考证管理:准考证生成规则:xxx+yy+zz+kk,其中 XXX 为考点代码;YY 为语言代码,XX 为考场号,KK 为座位号 同一级别、语言应根据报名初始库信息按随机数生成准考证,同一考点最多可有 99*30=2970 名考生;如已生成准考证号,再重新生成准考证号,应该给予提示。 准考证打印  考务管理:考生信息查询、浏览、打印  成绩管理:成绩数据录入、接收 成绩合成(总成绩=笔试成绩*0.6+上机成绩*0.4),按大于或等于 60 合格 参考数据如下:  初始报名表(准考证号(为空) ,报名号(主键) ,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)  含准考证号的报名表(准考证号(为主键) ,报名号,级别+语言种类(外键) ,姓名,性别, 出生年份,民族,身份证号,联系地址,联系电话,照片,备注,参加培训)  成绩表(准考证号,笔试成绩,上机成绩,总成绩) 级别语言代码表(级别语言代码,级别+语言)  用户信息表(考点代码,考点名称,用户名,密码) 题目10:人事管理系统(1 人)21 包括四大模块:  登录管理:包括操作员管理,口令设置,权限管理  人员管理:包括人事数据维护、人事信息查询和人事信息统计  工资管理  部门管理:包括部门表,职称表和年份表  查询及报表打印 参考数据如下:  人事表(编号,姓名,性别,出生日期,工作日期,部门代码,职称,婚否,简历,相片)  工资表(基本工资,岗位津贴,奖励,应发工资,水电,保险,实发工资)  部门表(代码,部门名称)  职称表(职称代码,职称名称)  年份表(年份代码,年份名称)  操作员表(操作员代码,操作员姓名,口令,部门,电话) 系统日志表(操作员代号,操作员姓名,登录时间,离开时间) 题目11:商品销售管理系统(1 人)19 包括四大模块:  用户登录  基本信息管理:包括销售情况、商品信息、库存表、员工表等信息的录入、浏览、修改、撤销、删除和查询等  商品销售管理:包括商品售出、退回和入库  盘点:包括库存盘点、当日销售盘点 参考数据如下:  商品信息表(商品编号,商品名称,品牌,型号,销售单价) 商品编号=类别代码(1 位)+品名代码(1 位)+品牌代码(2 位)+型号代码(2 位)  销售情况表(成交编号,商品编号,销售数量,总金额,销售日期,员工编号)  库存表(商品编号,供货商编号,进货日期,进货价,库存数量)  员工表(员工编号,员工姓名,性别,基本工资,职务,密码)  供货商表(供货商编号,供货商名称,所在地,联系电话)  员工资料表(员工编号,员工姓名,是否党员,简历,照片) 题目12:学生成绩管理系统(1 人)29 包括四大模块:  基本数据管理:包括院系管理,专业管理(设置院系下面的专业),班级管理(设置专业下面的班级),课程管理(设置相应专业下面的课程)  学生信息管理:包括基本信息录入、基本信息修改  学生成绩管理:包括学生成绩录入、学生成绩修改  信息查询:包括基本信息查询、成绩信息查询、学校人数统计  系统管理:用户管理、数据备份和系统帮助 参考数据如下:  院系信息(院系代码,院系名称)  院系专业信息(班级、院系代码,专业)  学生基本信息(班号,学号,姓名,性别,出生年月,籍贯,政治面貌,身份证号,入学年月,家庭地址,邮政编码,图片信息,备注)  学生成绩表(学号,课号,成绩,备注)  课程表(课号,课程名称,学期,备注)  班表(班号,班级名称)  用户信息表(用户名,密码,用户标识) 题目13:火车售票管理系统(4 人)36 包括四大模块:  售票管理  订票管理  信息查询  系统维护 参考数据如下:  车次信息表(车次,始发站,终点站,发车时间,到达时间)  订票信息表(车次,座位号,发车时期,发车时间,座位等级,票价)  车次座位等级分配及座位占用表(车次,座位号,座位等级,票价,占用标志)  用户信息表(用户名,密码,用户标识) 题目14:小型物业管理系统(1 人) 包括四大模块:  房源管理:对原始资料的录入、修改、查询和刷新。一般用户可以查询与房间有关 的统计资料;物业主管可其进行增、删、改、插等操作  租房管理:对房产出租,退租以及租房面积调整。其中物业主管可对其进行房租金 额计算和收款操作,一般用户对其查询  水电处理:根据租房资料,结合当月水、电量进行分摊,完成应收水电费。其中物 业主管对其进行计算,其他查询  交款处理:提供收款和发票打印以及交款数据查询  查询处理:对租房资料、交款资料,发票资料进行查询 参考数据如下:  房源资料(名称,面积,月租,物业,仓库)  租房资料(名称,面积,单位,月租,物业,押金,仓库)  水电资料(单位,电量,水量,电费,水费)  交费资料(收费项目,应收日期,应收金额,已收金额,未收金额,本次收款)  发票资料(单位,房租,电费,水费,物业)  权限资料(用户,密码,房源管理,租房管理,水电管理,交费管理,发票管理,系统维护) 其中系统管理员,有权进行系统维护;单位内部物业主管,有权进行物业资源调配、单元出 租,退租和收款开票操作;物业管理员,有权进行水电处理和收款处理等操行;租户代表, 有权进行种类费的查询操作 题目15:机房收费管理系统(1 人)7,34 包括四大模块:  登录模块  上机管理模块 说明:上机登记时,余额不足 3 元或卡处于挂失状态,则拒绝登记 每位同学的一次上机形成一条记录,每 36S 遍历一次上机记录表,对表中所有正上机字段为 TRUE 的记录的上机用时增加 36S,同时从上机卡表的余额减少  上机卡管理模块  充值挂失模块  查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学 生上机的次数、上机总时数、每次上机平均时间;挂失和查询余 参考数据如下:  上机卡(卡号,姓名,专业班级,余额,状态) 状态的取值有:正常(能自费上机)  挂失上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码),上机用时记录学生上机时间(S);正上机是一个布尔型,为 True 表示正上机,每 36 秒刷新 其上机用时并扣除上机费用,为 False 表示上机结束。上机记录表永久保存,用于事后查询 和统计 管理员(代码,姓名,口令)  题目16:高校药房管理(1 人)31 包括四大模块:  基础数据处理:包括医生和药剂师名单的录入,修改,删除及查询  营业数据处理:包括药品进货上柜,处理划价,配药,柜存药品查询,处方综合查 询,交接班结转清。 参考数据如下:  药品信息表(货号,货名,计量单位,进货数量,进货单价,出售单价,进货日期,收货人 和供应商)  处方信息(编号,患者姓名,医生姓名,药剂师姓名,处方日期,配药日期) 处方药品信息(处方编号,药品货号,计量单位,配药数量,销售单价,已配药否)  医生名单和药剂师名单表(姓名)  题目17:考勤管理系统(2 人)40 包括四大模块:  记录每个员工每天所有进入公司的时刻和离开公司的时刻。  每天结束时自动统计当天的工作时间  每天结束时自动统计当天迟到或早退的次数。  对于弹性工作制,每天结束时自动统计当月的工时,并自动算出当月欠缺或富余的 时间  每个月末统计该月的工作时间判断是束足够  每个月末统计该月的工作天数并判断是否足够  管理人员查询并修改工作时间(特殊情况下修改)  管理人员账户管理(如设置密码等)  管理人员设定早退及迟到的条件,每个月的工作时间  管理人员设定每个月的工作日期及放假日期 参考数据如下:  员工信息(工号,姓名,年龄,入职时间,职位,性别,密码)  配置信息(上班时间小时,上班时间分钟,下班时间小时,下班时间分钟,每天工作时间)  每月统计数据表(工号,姓名,剩余的时间,迟到的次数,早退的次数,工作天数)  每天统计信息表(工号,姓名,小时,分钟,动作,时间) 其中动作指的时入或离开公司  题目18:单位房产管理系统(2 人)33,10 包括四大模块:  系统模块:完成数据库维护、系统关闭功能  物业费用模块:完成本月物业的计费、历史资料查询和财务部门接口传送数据、物 业相关费用单价设置  房屋资源模块:对房屋资源进行添加、列表显示、查询  职工信息模块:对职工进行添加、列表显示、查询以及相应部门、职务进行维护  帮助模块:对用户使用本系统提供在线帮助 参考数据如下:  职工(编号,姓名,性别,参加工作时间,行政职务,专业技术职务,评上最高行政职务时 间,评上最高专业技术职务时间,双职工姓名,现居住房号,档案号,房产证号,所在部门 编号,是否为户主)  部门(编号,部门名称) 住房级别表(编号,级别,住房标准,控制标准,级别分类)  房产情况(编号,房号,使用面积,现居住人 id,上一个居住人 id,最早居住人 ID,阳台面积)  物业费用(编号,房号,水基数,水现在值,电基数,电现在值,燃气基数,燃气现在值, 当前年份,当前月份)  价格标准(编号,水单价,电单价,燃气单价) 题目19:标准化考试系统 (2 人)15,39 功能要求: 设计一个简单的标准化考试系统,仅有单项选择题、多项选择题和判断题功能即可。 包括四大模块:  题库管理:实现试题的录入、修改、删除功能;  考试子系统:能够实现考生做题、结果自动存入到数据库中,有时间提示;  选择身份(登录)功能:系统能够记录考生输入的登录信息及交卷信息;  自动评分功能:考生交卷后能自动评分;  查看成绩功能:能够查询考生相关信息(包含成绩等)。 参考数据如下: 其它可供选择的题目: 网上教务评教系统130,127,133 16 学生日常行为评分管理系统232,110,230 网上鲜花店 38 基于BS结构的工艺品销售系统12 基于BS结构的校园二手物品交易网站 37 大学生就业管理系统201,208,234 题库及试卷管理系统 数据库原理及应用 课程设计报告 题目: 课程设计选题管理系统 所在学院: 班 级: 学 号: 姓 名: 李四 指导教师: 2011年12月 日 目录 一、 概述 二、需求分析 三、概念设计 四、逻辑设计 五、系统实现 六、小结 一、概述

玄学酱 2019-12-02 01:22:25 0 浏览量 回答数 0

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 450407 浏览量 回答数 14

回答

92题 一般来说,建立INDEX有以下益处:提高查询效率;建立唯一索引以保证数据的唯一性;设计INDEX避免排序。 缺点,INDEX的维护有以下开销:叶节点的‘分裂’消耗;INSERT、DELETE和UPDATE操作在INDEX上的维护开销;有存储要求;其他日常维护的消耗:对恢复的影响,重组的影响。 需要建立索引的情况:为了建立分区数据库的PATITION INDEX必须建立; 为了保证数据约束性需要而建立的INDEX必须建立; 为了提高查询效率,则考虑建立(是否建立要考虑相关性能及维护开销); 考虑在使用UNION,DISTINCT,GROUP BY,ORDER BY等字句的列上加索引。 91题 作用:加快查询速度。原则:(1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引;(2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;(3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引。 90题 快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。快照对于拥有不能停止的应用或具有常打开文件的文件系统的备份非常重要。对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。 89题 游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。 88题 事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。 87题 MySQL可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引。具体原因为:MySQL使用索引时需要索引有序,假设现在建立了"name,age,school"的联合索引,那么索引的排序为: 先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序。因此在建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面。此外可以根据特例的查询或者表结构进行单独的调整。 86题 建立索引的时候一般要考虑到字段的使用频率,经常作为条件进行查询的字段比较适合。如果需要建立联合索引的话,还需要考虑联合索引中的顺序。此外也要考虑其他方面,比如防止过多的所有对表造成太大的压力。这些都和实际的表结构以及查询方式有关。 85题 存储过程是一组Transact-SQL语句,在一次编译后可以执行多次。因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。 84题 存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。 83题 减少表连接,减少复杂 SQL,拆分成简单SQL。减少排序:非必要不排序,利用索引排序,减少参与排序的记录数。尽量避免 select *。尽量用 join 代替子查询。尽量少使用 or,使用 in 或者 union(union all) 代替。尽量用 union all 代替 union。尽量早的将无用数据过滤:选择更优的索引,先分页再Join…。避免类型转换:索引失效。优先优化高并发的 SQL,而不是执行频率低某些“大”SQL。从全局出发优化,而不是片面调整。尽可能对每一条SQL进行 explain。 82题 如果条件中有or,即使其中有条件带索引也不会使用(要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引)。对于多列索引,不是使用的第一部分,则不会使用索引。like查询是以%开头。如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。如果mysql估计使用全表扫描要比使用索引快,则不使用索引。例如,使用<>、not in 、not exist,对于这三种情况大多数情况下认为结果集很大,MySQL就有可能不使用索引。 81题 主键不能重复,不能为空,唯一键不能重复,可以为空。建立主键的目的是让外键来引用。一个表最多只有一个主键,但可以有很多唯一键。 80题 空值('')是不占用空间的,判断空字符用=''或者<>''来进行处理。NULL值是未知的,且占用空间,不走索引;判断 NULL 用 IS NULL 或者 is not null ,SQL 语句函数中可以使用 ifnull ()函数来进行处理。无法比较 NULL 和 0;它们是不等价的。无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。NULL 值可以使用 <=> 符号进行比较,该符号与等号作用相似,但对NULL有意义。进行 count ()统计某列的记录数的时候,如果采用的 NULL 值,会被系统自动忽略掉,但是空值是统计到其中。 79题 HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引。一旦服务器重启,所有heap表数据丢失。BLOB或TEXT字段是不允许的。只能使用比较运算符=,<,>,=>,= <。HEAP表不支持AUTO_INCREMENT。索引不可为NULL。 78题 如果想输入字符为十六进制数字,可以输入带有单引号的十六进制数字和前缀(X),或者只用(Ox)前缀输入十六进制数字。如果表达式上下文是字符串,则十六进制数字串将自动转换为字符串。 77题 Mysql服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。 76题 在缺省模式下,MYSQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,mysql是不支持事务的。但是如果你的MYSQL表类型是使用InnoDB Tables 或 BDB tables的话,你的MYSQL就可以使用事务处理,使用SET AUTOCOMMIT=0就可以使MYSQL允许在非autocommit模式,在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。 75题 它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。 74题 创建索引的时候尽量使用唯一性大的列来创建索引,由于使用b+tree做为索引,以innodb为例,一个树节点的大小由“innodb_page_size”,为了减少树的高度,同时让一个节点能存放更多的值,索引列尽量在整数类型上创建,如果必须使用字符类型,也应该使用长度较少的字符类型。 73题 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 限定数据的范围: 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。读/写分离: 经典的数据库拆分方案,主库负责写,从库负责读。垂直分区: 根据数据库里面数据表的相关性进行拆分。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。水平分区: 保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。水平拆分可以支撑非常大的数据量。 72题 乐观锁失败后会抛出ObjectOptimisticLockingFailureException,那么我们就针对这块考虑一下重试,自定义一个注解,用于做切面。针对注解进行切面,设置最大重试次数n,然后超过n次后就不再重试。 71题 一致性非锁定读讲的是一条记录被加了X锁其他事务仍然可以读而不被阻塞,是通过innodb的行多版本实现的,行多版本并不是实际存储多个版本记录而是通过undo实现(undo日志用来记录数据修改前的版本,回滚时会用到,用来保证事务的原子性)。一致性锁定读讲的是我可以通过SELECT语句显式地给一条记录加X锁从而保证特定应用场景下的数据一致性。 70题 数据库引擎:尤其是mysql数据库只有是InnoDB引擎的时候事物才能生效。 show engines 查看数据库默认引擎;SHOW TABLE STATUS from 数据库名字 where Name='表名' 如下;SHOW TABLE STATUS from rrz where Name='rrz_cust';修改表的引擎alter table table_name engine=innodb。 69题 如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;当然了,这个前提是,键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据;如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索;同理,哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);哈希索引也不支持多列联合索引的最左匹配规则;B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。 68题 decimal精度比float高,数据处理比float简单,一般优先考虑,但float存储的数据范围大,所以范围大的数据就只能用它了,但要注意一些处理细节,因为不精确可能会与自己想的不一致,也常有关于float 出错的问题。 67题 datetime、timestamp精确度都是秒,datetime与时区无关,存储的范围广(1001-9999),timestamp与时区有关,存储的范围小(1970-2038)。 66题 Char使用固定长度的空间进行存储,char(4)存储4个字符,根据编码方式的不同占用不同的字节,gbk编码方式,不论是中文还是英文,每个字符占用2个字节的空间,utf8编码方式,每个字符占用3个字节的空间。Varchar保存可变长度的字符串,使用额外的一个或两个字节存储字符串长度,varchar(10),除了需要存储10个字符,还需要1个字节存储长度信息(10),超过255的长度需要2个字节来存储。char和varchar后面如果有空格,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较。Varbinary保存变长的字符串,后面不会补\0。 65题 首先分析语句,看看是否load了额外的数据,可能是查询了多余的行并且抛弃掉了,可能是加载了许多结果中并不需要的列,对语句进行分析以及重写。分析语句的执行计划,然后获得其使用索引的情况,之后修改语句或者修改索引,使得语句可以尽可能的命中索引。如果对语句的优化已经无法进行,可以考虑表中的数据量是否太大,如果是的话可以进行横向或者纵向的分表。 64题 建立索引的时候一般要考虑到字段的使用频率,经常作为条件进行查询的字段比较适合。如果需要建立联合索引的话,还需要考虑联合索引中的顺序。此外也要考虑其他方面,比如防止过多的所有对表造成太大的压力。这些都和实际的表结构以及查询方式有关。 63题 存储过程是一些预编译的SQL语句。1、更加直白的理解:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。2、存储过程是一个预编译的代码块,执行效率比较高,一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率,可以一定程度上确保数据安全。 62题 密码散列、盐、用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率。 61题 推荐使用自增ID,不要使用UUID。因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID,那么只需要不断向后排列即可,如果是UUID,由于到来的ID与原来的大小不确定,会造成非常多的数据插入,数据移动,然后导致产生很多的内存碎片,进而造成插入性能的下降。总之,在数据量大一些的情况下,用自增主键性能会好一些。 60题 char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容。该字段都占用10个字符,而varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间。在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar。例如存储用户MD5加密后的密码,则应该使用char。 59题 一. read uncommitted(读取未提交数据) 即便是事务没有commit,但是我们仍然能读到未提交的数据,这是所有隔离级别中最低的一种。 二. read committed(可以读取其他事务提交的数据)---大多数数据库默认的隔离级别 当前会话只能读取到其他事务提交的数据,未提交的数据读不到。 三. repeatable read(可重读)---MySQL默认的隔离级别 当前会话可以重复读,就是每次读取的结果集都相同,而不管其他事务有没有提交。 四. serializable(串行化) 其他会话对该表的写操作将被挂起。可以看到,这是隔离级别中最严格的,但是这样做势必对性能造成影响。所以在实际的选用上,我们要根据当前具体的情况选用合适的。 58题 B+树的高度一般为2-4层,所以查找记录时最多只需要2-4次IO,相对二叉平衡树已经大大降低了。范围查找时,能通过叶子节点的指针获取数据。例如查找大于等于3的数据,当在叶子节点中查到3时,通过3的尾指针便能获取所有数据,而不需要再像二叉树一样再获取到3的父节点。 57题 因为事务在修改页时,要先记 undo,在记 undo 之前要记 undo 的 redo, 然后修改数据页,再记数据页修改的 redo。 Redo(里面包括 undo 的修改) 一定要比数据页先持久化到磁盘。 当事务需要回滚时,因为有 undo,可以把数据页回滚到前镜像的状态,崩溃恢复时,如果 redo log 中事务没有对应的 commit 记录,那么需要用 undo把该事务的修改回滚到事务开始之前。 如果有 commit 记录,就用 redo 前滚到该事务完成时并提交掉。 56题 redo log是物理日志,记录的是"在某个数据页上做了什么修改"。 binlog是逻辑日志,记录的是这个语句的原始逻辑,比如"给ID=2这一行的c字段加1"。 redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。 redo log是循环写的,空间固定会用完:binlog 是可以追加写入的。"追加写"是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 最开始 MySQL 里并没有 InnoDB 引擎,MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog日志只能用于归档。而InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统,也就是 redo log 来实现 crash-safe 能力。 55题 重做日志(redo log)      作用:确保事务的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,达到事务一致性。 回滚日志(undo log)  作用:保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。 二进 制日志(binlog)    作用:用于主从复制,实现主从同步;用于数据库的基于时间点的还原。 错误日志(errorlog) 作用:Mysql本身启动,停止,运行期间发生的错误信息。 慢查询日志(slow query log)  作用:记录执行时间过长的sql,时间阈值可以配置,只记录执行成功。 一般查询日志(general log)    作用:记录数据库的操作明细,默认关闭,开启后会降低数据库性能 。 中继日志(relay log) 作用:用于数据库主从同步,将主库发来的bin log保存在本地,然后从库进行回放。 54题 MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 死锁: 是指两个或两个以上的进程在执行过程中。因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。 那么对应的解决死锁问题的关键就是:让不同的session加锁有次序。死锁的解决办法:1.查出的线程杀死。2.设置锁的超时时间。3.指定获取锁的顺序。 53题 当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性(脏读,不可重复读,幻读等),可能产生死锁。 乐观锁:乐观锁不是数据库自带的,需要我们自己去实现。 悲观锁:在进行每次操作时都要通过获取锁才能进行对相同数据的操作。 共享锁:加了共享锁的数据对象可以被其他事务读取,但不能修改。 排他锁:当数据对象被加上排它锁时,一个事务必须得到锁才能对该数据对象进行访问,一直到事务结束锁才被释放。 行锁:就是给某一条记录加上锁。 52题 Mysql是关系型数据库,MongoDB是非关系型数据库,数据存储结构的不同。 51题 关系型数据库优点:1.保持数据的一致性(事务处理)。 2.由于以标准化为前提,数据更新的开销很小。 3. 可以进行Join等复杂查询。 缺点:1、为了维护一致性所付出的巨大代价就是其读写性能比较差。 2、固定的表结构。 3、高并发读写需求。 4、海量数据的高效率读写。 非关系型数据库优点:1、无需经过sql层的解析,读写性能很高。 2、基于键值对,数据没有耦合性,容易扩展。 3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 缺点:1、不提供sql支持,学习和使用成本较高。 2、无事务处理,附加功能bi和报表等支持也不好。 redis与mongoDB的区别: 性能:TPS方面redis要大于mongodb。 可操作性:mongodb支持丰富的数据表达,索引,redis较少的网络IO次数。 可用性:MongoDB优于Redis。 一致性:redis事务支持比较弱,mongoDB不支持事务。 数据分析:mongoDB内置了数据分析的功能(mapreduce)。 应用场景:redis数据量较小的更性能操作和运算上,MongoDB主要解决海量数据的访问效率问题。 50题 如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Redis集群可以做到这样。 49题 分区可以让Redis管理更大的内存,Redis将可以使用所有机器的内存。如果没有分区,你最多只能使用一台机器的内存。分区使Redis的计算能力通过简单地增加计算机得到成倍提升,Redis的网络带宽也会随着计算机和网卡的增加而成倍增长。 48题 除了缓存服务器自带的缓存失效策略之外(Redis默认的有6种策略可供选择),我们还可以根据具体的业务需求进行自定义的缓存淘汰,常见的策略有两种: 1.定时去清理过期的缓存; 2.当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。 两者各有优劣,第一种的缺点是维护大量缓存的key是比较麻烦的,第二种的缺点就是每次用户请求过来都要判断缓存失效,逻辑相对比较复杂!具体用哪种方案,可以根据应用场景来权衡。 47题 Redis提供了两种方式来作消息队列: 一个是使用生产者消费模式模式:会让一个或者多个客户端监听消息队列,一旦消息到达,消费者马上消费,谁先抢到算谁的,如果队列里没有消息,则消费者继续监听 。另一个就是发布订阅者模式:也是一个或多个客户端订阅消息频道,只要发布者发布消息,所有订阅者都能收到消息,订阅者都是平等的。 46题 Redis的数据结构列表(list)可以实现延时队列,可以通过队列和栈来实现。blpop/brpop来替换lpop/rpop,blpop/brpop阻塞读在队列没有数据的时候,会立即进入休眠状态,一旦数据到来,则立刻醒过来。Redis的有序集合(zset)可以用于实现延时队列,消息作为value,时间作为score。Zrem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 45题 1.热点数据缓存:因为Redis 访问速度块、支持的数据类型比较丰富。 2.限时业务:expire 命令设置 key 的生存时间,到时间后自动删除 key。 3.计数器:incrby 命令可以实现原子性的递增。 4.排行榜:借助 SortedSet 进行热点数据的排序。 5.分布式锁:利用 Redis 的 setnx 命令进行。 6.队列机制:有 list push 和 list pop 这样的命令。 44题 一致哈希 是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n 个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。 43题 RDB的优点:适合做冷备份;读写服务影响小,reids可以保持高性能;重启和恢复redis进程,更加快速。RDB的缺点:宕机会丢失最近5分钟的数据;文件特别大时可能会暂停数毫秒,或者甚至数秒。 AOF的优点:每个一秒执行fsync操作,最多丢失1秒钟的数据;以append-only模式写入,没有任何磁盘寻址的开销;文件过大时,不会影响客户端读写;适合做灾难性的误删除的紧急恢复。AOF的缺点:AOF日志文件比RDB数据快照文件更大,支持写QPS比RDB支持的写QPS低;比RDB脆弱,容易有bug。 42题 对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis的操作之所以是原子性的,是因为Redis是单线程的。而在程序中执行多个Redis命令并非是原子性的,这也和普通数据库的表现是一样的,可以用incr或者使用Redis的事务,或者使用Redis+Lua的方式实现。对Redis来说,执行get、set以及eval等API,都是一个一个的任务,这些任务都会由Redis的线程去负责执行,任务要么执行成功,要么执行失败,这就是Redis的命令是原子性的原因。 41题 (1)twemproxy,使用方式简单(相对redis只需修改连接端口),对旧项目扩展的首选。(2)codis,目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在节点数改变情况下,旧节点数据可恢复到新hash节点。(3)redis cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。(4)在业务代码层实现,起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的代替算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。 40题 (1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件 (2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次 (3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内 (4) 尽量避免在压力很大的主库上增加从库 (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。 39题 比如订单管理,热数据:3个月内的订单数据,查询实时性较高;温数据:3个月 ~ 12个月前的订单数据,查询频率不高;冷数据:1年前的订单数据,几乎不会查询,只有偶尔的查询需求。热数据使用mysql进行存储,需要分库分表;温数据可以存储在ES中,利用搜索引擎的特性基本上也可以做到比较快的查询;冷数据可以存放到Hive中。从存储形式来说,一般情况冷数据存储在磁带、光盘,热数据一般存放在SSD中,存取速度快,而温数据可以存放在7200转的硬盘。 38题 当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。降级的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算)。 37题 分层架构设计,有一条准则:站点层、服务层要做到无数据无状态,这样才能任意的加节点水平扩展,数据和状态尽量存储到后端的数据存储服务,例如数据库服务或者缓存服务。显然进程内缓存违背了这一原则。 36题 更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个 jvm 内部队列中。读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个 jvm 内部队列中。一个队列对应一个工作线程,每个工作线程串行拿到对应的操作,然后一条一条的执行。 35题 redis分布式锁加锁过程:通过setnx向特定的key写入一个随机值,并同时设置失效时间,写值成功既加锁成功;redis分布式锁解锁过程:匹配随机值,删除redis上的特点key数据,要保证获取数据、判断一致以及删除数据三个操作是原子的,为保证原子性一般使用lua脚本实现;在此基础上进一步优化的话,考虑使用心跳检测对锁的有效期进行续期,同时基于redis的发布订阅优雅的实现阻塞式加锁。 34题 volatile-lru:当内存不足以容纳写入数据时,从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。 volatile-ttl:当内存不足以容纳写入数据时,从已设置过期时间的数据集中挑选将要过期的数据淘汰。 volatile-random:当内存不足以容纳写入数据时,从已设置过期时间的数据集中任意选择数据淘汰。 allkeys-lru:当内存不足以容纳写入数据时,从数据集中挑选最近最少使用的数据淘汰。 allkeys-random:当内存不足以容纳写入数据时,从数据集中任意选择数据淘汰。 noeviction:禁止驱逐数据,当内存使用达到阈值的时候,所有引起申请内存的命令会报错。 33题 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。 定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。 32题 缓存击穿,一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。如何避免:在访问key之前,采用SETNX(set if not exists)来设置另一个短期key来锁住当前key的访问,访问结束再删除该短期key。 31题 缓存雪崩,是指在某一个时间段,缓存集中过期失效。大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。而缓存服务器某个节点宕机或断网,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮。如何避免:1.redis高可用,搭建redis集群。2.限流降级,在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。3.数据预热,在即将发生大并发访问前手动触发加载缓存不同的key,设置不同的过期时间。 30题 缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。一些恶意的请求会故意查询不存在的 key,请求量很大,对数据库造成压力,甚至压垮数据库。 如何避免:1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该 key 对应的数据 insert 了之后清理缓存。2:对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中,查询时通过该 bitmap 过滤。 29题 1.memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型。 2.redis 的速度比 memcached 快很多。 3.redis 可以持久化其数据。 4.Redis支持数据的备份,即master-slave模式的数据备份。 5.Redis采用VM机制。 6.value大小:redis最大可以达到1GB,而memcache只有1MB。 28题 Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过spring提供的@ImportResource来加载xml配置。例如:@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"}) 27题 Spring像一个大家族,有众多衍生产品例如Spring Boot,Spring Security等等,但他们的基础都是Spring的IOC和AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能。Spring MVC是基于Servlet的一个MVC框架,主要解决WEB开发的问题,因为 Spring的配置非常复杂,各种xml,properties处理起来比较繁琐。Spring Boot遵循约定优于配置,极大降低了Spring使用门槛,又有着Spring原本灵活强大的功能。总结:Spring MVC和Spring Boot都属于Spring,Spring MVC是基于Spring的一个MVC框架,而Spring Boot是基于Spring的一套快速开发整合包。 26题 YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。YAML 的配置文件后缀为 .yml,是一种人类可读的数据序列化语言,可以简单表达清单、散列表,标量等数据形态。它通常用于配置文件,与属性文件相比,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。 25题 Spring Boot有3种热部署方式: 1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动。 2.使用springloaded本地加载启动,配置jvm参数-javaagent:<jar包地址> -noverify。 3.使用devtools工具包,操作简单,但是每次需要重新部署。 用

游客ih62co2qqq5ww 2020-03-27 23:56:48 0 浏览量 回答数 0

问题

移植到 Direct3D 11:报错 

kun坤 2020-06-04 21:07:16 6 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播