专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SQL常用的函数算术函数字符串函数日期函数和转换函数

  目录一、函数的种类二、算术函数2。1ABS绝对值2。2MOD求余2。3ROUND四舍五入三、字符串函数3。1拼接3。2LENGTH字符串长度3。3LOWER小写转换3。4REPLACE字符串的替换3。5SUBSTRING字符串的截取3。6UPPER大写转换四、日期函数4。1CURRENTDATE当前日期4。2CURRENTTIME当前时间4。3CURRENTTIMESTAMP当前日期和时间4。4EXTRACT截取日期元素五、转换函数5。1CAST类型转换5。2COALESCE将NULL转换为其他值
  不仅SQL,对所有的编程语言来说,函数都起着至关重要的作用。函数就像是编程语言的道具箱,每种编程语言都准备了非常多的函数。
  使用函数,我们可以实现计算、字符串操作、日期计算等各种各样的运算。本文重点
  根据用途,函数可以大致分为算术函数、字符串函数、日期函数、转换函聚合函数。
  函数的种类很多,无需全都记住,只需要记住具有代表性的函数就可以了,其他的可以在使用时再进行查询。一、函数的种类
  前几篇和大家一起学习了SQL的语法结构等必须要遵守的规则。本文将会进行一点改变,来学习一些SQL自带的便利工具函数。
  我们在SQL如何对表进行聚合和分组查询并对查询结果进行排序中已经学习了函数的概念,这里再回顾一下。所谓函数,就是输入某一值得到相应输出结果的功能,输入值称为参数(parameter),输出值称为返回值。
  函数大致可以分为以下几种。算术函数(用来进行数值计算的函数)字符串函数(用来进行字符串操作的函数)日期函数(用来进行日期操作的函数)转换函数(用来转换数据类型和值的函数)聚合函数(用来进行数据聚合的函数)
  我们已经在SQL如何对表进行聚合和分组查询并对查询结果进行排序中学习了聚合函数的相关内容,大家应该对函数有初步的了解了吧。
  聚合函数基本上只包含COUNT、SUM、AVG、MAX、MIN这5种,而其他种类的函数总数则超过200种。
  可能大家会觉得怎么会有那么多函数啊,但其实并不需要担心,虽然数量众多,但常用函数只有3050个。不熟悉的函数大家可以查阅参考文档(词典)来了解〔1〕。
  本文我们将学习一些具有代表性的函数。大家并不需要一次全部记住,只需要知道有这样的函数就可以了,实际应用时可以查阅参考文档。
  接下来,让我们来详细地看一看这些函数。二、算术函数
  算术函数是最基本的函数,其实之前我们已经学习过了,可能有些读者已经想起来了。没错,就是算术运算符和比较运算符介绍的加减乘除四则运算。(加法)(减法)(乘法)(除法)
  由于这些算术运算符具有根据输入值返回相应输出结果的功能,因此它们是出色的算术函数。在此我们将会给大家介绍除此之外的具有代表性的函数。
  为了学习算术函数,我们首先根据代码清单1创建一张示例用表(SampleMath)。
  NUMERIC是大多数DBMS都支持的一种数据类型,通过NUMBERIC(全体位数,小数位数)的形式来指定数值的大小。
  接下来,将会给大家介绍常用的算术函数ROUND函数,由于PostgreSQL中的ROUND函数只能使用NUMERIC类型的数据,因此我们在示例中也使用了该数据类型。
  代码清单1创建SampleMath表DDL:创建表CREATETABLESampleMath(mNUMERIC(10,3),nINTEGER,pINTEGER);
  SQLServerPostgreSQLDML:插入数据BEGINTRANSACTION;INSERTINTOSampleMath(m,n,p)VALUES(500,0,NULL);INSERTINTOSampleMath(m,n,p)VALUES(180,0,NULL);INSERTINTOSampleMath(m,n,p)VALUES(NULL,NULL,NULL);INSERTINTOSampleMath(m,n,p)VALUES(NULL,7,3);INSERTINTOSampleMath(m,n,p)VALUES(NULL,5,2);INSERTINTOSampleMath(m,n,p)VALUES(NULL,4,NULL);INSERTINTOSampleMath(m,n,p)VALUES(8,NULL,3);INSERTINTOSampleMath(m,n,p)VALUES(2。27,1,NULL);INSERTINTOSampleMath(m,n,p)VALUES(5。555,2,NULL);INSERTINTOSampleMath(m,n,p)VALUES(NULL,1,NULL);INSERTINTOSampleMath(m,n,p)VALUES(8。76,NULL,NULL);COMMIT;特定的SQL
  不同的DBMS事务处理的语法也不尽相同。代码清单1中的DML语句在MySQL中执行时,需要将部分更改为STARTTRANSACTION;,在Oracle和DB2中执行时,无需用到的部分(请删除)。
  详细内容请大家参考什么是SQL事务中的创建事务。
  下面让我们来确认一下创建好的表中的内容,其中应该包含了m、n、p三列。SELECTFROMSampleMath;
  执行结果:mnp500。0000180。0000735248。00032。27015。555218。7602。1ABS绝对值
  语法1ABS函数ABS(数值)
  ABS是计算绝对值的函数。绝对值(absolutevalue)不考虑数值的符号,表示一个数到原点的距离。
  简单来讲,绝对值的计算方法就是:0和正数的绝对值就是其本身,负数的绝对值就是去掉符号后的结果。
  代码清单2计算数值的绝对值SELECTm,ABS(m)ASabscolFROMSampleMath;
  执行结果:
  右侧的abscol列就是通过ABS函数计算出的m列的绝对值。请大家注意,180的绝对值就是去掉符号后的结果180。
  通过上述结果我们可以发现,ABS函数的参数为NULL时,结果也是NULL。并非只有ABS函数如此,其实绝大多数函数对于NULL都返回NULL〔2〕。2。2MOD求余
  语法2MOD函数MOD(被除数,除数)
  MOD是计算除法余数(求余)的函数,是modulo的缩写。例如,73的余数是1,因此MOD(7,3)的结果也是1(代码清单3)。
  因为小数计算中并没有余数的概念,所以只能对整数类型的列使用MOD函数。
  代码清单3计算除法(np)的余数
  OracleDB2PostgreSQLMySQLSELECTn,p,MOD(n,p)ASmodcolFROMSampleMath;
  执行结果:npmodcol0073152143121
  这里有一点需要大家注意:主流的DBMS都支持MOD函数,只有SQLServer不支持该函数。特定的SQL
  SQLServer使用特殊的运算符(函数)来计算余数,使用如下的专用语法可以得到与代码清单3相同的结果。需要使用SQLServer的读者需要特别注意。
  SQLServer
  SELECTn,p,npASmodcolFROMSampleMath;2。3ROUND四舍五入
  语法3ROUND函数ROUND(对象数值,保留小数的位数)
  ROUND函数用来进行四舍五入操作。四舍五入在英语中称为round。
  如果指定四舍五入的位数为1,那么就会对小数点第2位进行四舍五入处理。如果指定位数为2,那么就会对第3位进行四舍五入处理(代码清单4)。
  代码清单4对m列的数值进行n列位数的四舍五入处理SELECTm,n,ROUND(m,n)ASroundcolFROMSampleMath;
  执行结果:mnroundcol500。0000500180。00001807548。0002。27012。35。55525。5618。760三、字符串函数
  截至目前,我们介绍的函数都是主要针对数值的算术函数,但其实算术函数只是SQL(其他编程语言通常也是如此)自带的函数中的一部分。
  虽然算术函数是我们经常使用的函数,但是字符串函数也同样经常被使用。
  在日常生活中,我们经常会像使用数字那样,对字符串进行替换、截取、简化等操作,因此SQL也为我们提供了很多操作字符串的功能。
  为了学习字符串函数,我们再来创建一张表(SampleStr),参见代码清单5。
  代码清单5创建SampleStr表DDL:创建表CREATETABLESampleStr(str1VARCHAR(40),str2VARCHAR(40),str3VARCHAR(40));
  SQLServerPostgreSQLDML:插入数据BEGINTRANSACTION;INSERTINTOSampleStr(str1,str2,str3)VALUES(opx,rt,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(abc,def,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(山田,太郎,是我);INSERTINTOSampleStr(str1,str2,str3)VALUES(aaa,NULL,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(NULL,xyz,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(!,NULL,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(ABC,NULL,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(aBC,NULL,NULL);INSERTINTOSampleStr(str1,str2,str3)VALUES(abc太郎,abc,ABC);INSERTINTOSampleStr(str1,str2,str3)VALUES(abcdefabc,abc,ABC);INSERTINTOSampleStr(str1,str2,str3)VALUES(micmic,i,I);COMMIT;特定的SQL
  不同的DBMS事务处理的语法也不尽相同。代码清单5中的DML语句在MySQL中执行时,需要将部分更改为STARTTRANSACTION;。在Oracle和DB2中执行时,无需用到的部分(请删除)。
  详细内容请大家参考什么是SQL事务中的创建事务。
  下面让我们来确认一下创建好的表中的内容,其中应该包含了str1、str2、str3三列。SELECTFROMSampleStr;
  执行结果:str1str2str3opxrtabcdef山田太郎是我aaaxyz!ABCaBCabc太郎abcABCabcdefabcabcABCmicmiciI3。1拼接
  语法4函数字符串1字符串2
  在实际业务中,我们经常会碰到abcdeabcde这样希望将字符串进行拼接的情况。在SQL中,可以通过由两条并列的竖线变换而成的函数来实现(代码清单6)。
  代码清单6拼接两个字符串(str1str2)
  OracleDB2PostgreSQLSELECTstr1,str2,str1str2ASstrconcatFROMSampleStr;
  执行结果:str1str2strconcatopxrtopxrtabcdefabcdef山田太郎山田太郎aaaxyz!ABCaBCabc太郎abcabc太郎abcabcdefabcabcabcdefabcabcmicmicimicmaci
  进行字符串拼接时,如果其中包含NULL,那么得到的结果也是NULL。这是因为也是变了形的函数。当然,三个以上的字符串也可以进行拼接(代码清单7)。
  代码清单7拼接三个字符串(str1str2str3)
  OracleDB2PostgreSQLSELECTstr1,str2,str3,str1str2str3ASstrconcatFROMSampleStrWHEREstr1山田;
  执行结果:str1str2str3strconcat山田太郎是我山田太郎是我
  这里也有一点需要大家注意,函数在SQLServer和MySQL中无法使用。特定的SQL
  SQLServer使用运算符(函数)来连接字符串。MySQL使用CONCAT函数来完成字符串的拼接。
  使用如下SQLServerMySQL的专用语法能够得到与代码清单7相同的结果。另外,在SQLServer2012及其之后的版本中也可以使用CONCAT函数。
  SQLServer
  SELECTstr1,str2,str3,str1str2str3ASstrconcatFROMSampleStr;
  MySQLSQLServer2012及之后
  SELECTstr1,str2,str3,CONCAT(str1,str2,str3)ASstrconcatFROMSampleStr;3。2LENGTH字符串长度
  语法5LENGTH函数LENGTH(字符串)
  想要知道字符串中包含多少个字符时,可以使用LENGTH(长度)函数(代码清单8)。
  代码清单8计算字符串长度
  OracleDB2PostgreSQLMySQLSELECTstr1,LENGTH(str1)ASlenstrFROMSampleStr;
  执行结果:str1lenstropx3abc3山田2aaa3!5ABC3aBC3abc太郎5abcdefabc9micmic6
  需要注意的是,该函数也无法在SQLServer中使用。特定的SQL
  SQLServer使用LEN函数来计算字符串的长度。使用如下SQLServer的专用语法能够得到与代码清单8相同的结果。
  SQLServer
  SELECTstr1,LEN(str1)ASlenstrFROMSampleStr;
  我想大家应该逐渐明白SQL中有很多特定的用法这句话的含义了吧。专栏
  对1个字符使用LENGTH函数有可能得到2字节以上的结果
  LENGTH函数中,还有一点需要大家特别注意,那就是该函数究竟以什么为单位来计算字符串的长度。这部分是初级以上阶段才会学习到的内容,在此先简单介绍一下。
  可能有些读者已经有所了解,与半角英文字母占用1字节不同,汉字这样的全角字符会占用2个以上的字节(称为多字节字符)。
  因此,使用MySQL中的LENGTH这样以字节为单位的函数进行计算时,LENGTH(山田)的返回结果是4。同样是LENGTH函数,不同DBMS的执行结果也不尽相同。3。3LOWER小写转换
  语法6LOWER函数LOWER(字符串)
  LOWER函数只能针对英文字母使用,它会将参数中的字符串全都转换为小写(代码清单9)。
  因此,该函数并不适用于英文字母以外的场合。此外,该函数并不影响原本就是小写的字符。
  代码清单9大写转换为小写SELECTstr1,LOWER(str1)ASlowstrFROMSampleStrWHEREstr1IN(ABC,aBC,abc,山田);
  执行结果:str1lowstrabcabc山田山田ABCabcaBCabc
  既然存在小写转换函数,那么肯定也有大写转换函数,UPPER就是大写转换函数。3。4REPLACE字符串的替换
  语法7REPLACE函数REPLACE(对象字符串,替换前的字符串,替换后的字符串)
  使用REPLACE函数,可以将字符串的一部分替换为其他的字符串(代码清单10)。
  代码清单10替换字符串的一部分SELECTstr1,str2,str3,REPLACE(str1,str2,str3)ASrepstrFROMSampleStr;
  执行结果:str1str2str3repstropxrtabcdef山田太郎是我山田aaaxyz!ABCaBCabc太郎abcABCABC太郎abcdefabcabcABCABCdefABCmicmiciImIcmIc3。5SUBSTRING字符串的截取
  语法8SUBSTRING函数(PostgreSQLMySQL专用语法)SUBSTRING(对象字符串FROM截取的起始位置FOR截取的字符数)
  使用SUBSTRING函数可以截取出字符串中的一部分字符串(代码清单11)。截取的起始位置从字符串最左侧开始计算〔3〕。
  代码清单11截取出字符串中第3位和第4位的字符
  PostgreSQLMySQLSELECTstr1,SUBSTRING(str1FROM3FOR2)ASsubstrFROMSampleStr;
  执行结果:str1substropxxabcc山田aaaa!ABCCaBCCabc太郎c太abcdefabccdmicmiccm
  虽然上述SUBSTRING函数的语法是标准SQL承认的正式语法,但是现在只有PostgreSQL和MySQL支持该语法。特定的SQL
  SQLServer将语法a中的内容进行了简化(语法b)。
  语法aSUBSTRING函数(SQLServer专用语法)
  SUBSTRING(对象字符串,截取的起始位置,截取的字符数)
  Oracle和DB2将该语法进一步简化,得到了如下结果。
  语法bSUBSTR函数(OracleDB2专用语法)
  SUBSTR(对象字符串,截取的起始位置,截取的字符数)
  SQL有这么多特定的语法,真是有些让人头疼啊。各DBMS中能够得到与代码清单11相同结果的专用语法如下所示。
  SQLServer
  SELECTstr1,SUBSTRING(str1,3,2)ASsubstrFROMSampleStr;
  OracleDB2
  SELECTstr1,SUBSTR(str1,3,2)ASsubstrFROMSampleStr;3。6UPPER大写转换
  语法9UPPER函数UPPER(字符串)
  UPPER函数只能针对英文字母使用,它会将参数中的字符串全都转换为大写(代码清单12)。
  因此,该函数并不适用于英文字母以外的情况。此外,该函数并不影响原本就是大写的字符。
  代码清单12将小写转换为大写SELECTstr1,UPPER(str1)ASupstrFROMSampleStrWHEREstr1IN(ABC,aBC,abc,山田);
  执行结果:str1upstrabcABC山田山田ABCABCaBCABC
  与之相对,进行小写转换的是LOWER函数。四、日期函数
  虽然SQL中有很多日期函数,但是其中大部分都依存于各自的DBMS,因此无法统一说明〔4〕。本节将会介绍那些被标准SQL承认的可以应用于绝大多数DBMS的函数。4。1CURRENTDATE当前日期
  语法10CURRENTDATE函数CURRENTDATE
  CURRENTDATE函数能够返回SQL执行的日期,也就是该函数执行时的日期。由于没有参数,因此无需使用括号。
  执行日期不同,CURRENTDATE函数的返回值也不同。如果在2009年12月13日执行该函数,会得到返回值20091213。如果在2010年1月1日执行,就会得到返回值20100101(代码清单13)。
  代码清单13获得当前日期SELECTCURRENTDATE;
  执行结果:date20160525
  该函数无法在SQLServer中执行。此外,Oracle和DB2中的语法略有不同。特定的SQL
  SQLServer使用如下的CURRENTTIMESTAMP(后述)函数来获得当前日期。
  SQLServer
  使用CAST(后述)函数将CURRENTTIMESTAMP转换为日期类型SELECTCAST(CURRENTTIMESTAMPASDATE)ASCURDATE;
  执行结果:
  CURDATE20100525
  在Oracle中使用该函数时,需要在FROM子句中指定临时表(DUAL)。
  而在DB2中使用时,需要在CRUUENT和DATE之间添加半角空格,并且还需要指定临时表SYSIBM。SYSDUMMY1(相当于Oracle中的DUAL)。
  这些容易混淆的地方请大家多加注意。
  Oracle
  SELECTCURRENTDATEFROMdual;
  DB2
  SELECTCURRENTDATEFROMSYSIBM。SYSDUMMY1;4。2CURRENTTIME当前时间
  语法11CURRENTTIME函数CURRENTTIME
  CURRENTTIME函数能够取得SQL执行的时间,也就是该函数执行时的时间(代码清单14)。由于该函数也没有参数,因此同样无需使用括号。
  代码清单14取得当前时间
  PostgreSQLMySQLSELECTCURRENTTIME;
  执行结果:timetz17:26:50。99509
  该函数同样无法在SQLServer中执行,在Oracle和DB2中的语法同样略有不同。特定的SQL
  SQLServer使用如下的CURRENTTIMESTAMP函数(后述)来获得当前日期。
  使用CAST函数(后述)将CURRENTTIMESTAMP转换为时间类型SELECTCAST(CURRENTTIMESTAMPASTIME)ASCURTIME;
  执行结果:
  CURTIME21:33:59。3400000
  在Oracle和DB2中使用时的语法如下所示。需要注意的地方和CURRENTDATE函数相同。在Oracle中使用时所得到的结果还包含日期。
  Oracle
  指定临时表(DUAL)SELECTCURRENTTIMESTAMPFROMdual;
  DB2
  CURRENT和TIME之间使用了半角空格,指定临时表SYSIBM。SYSDUMMY1SELECTCURRENTTIMEFROMSYSIBM。SYSDUMMY1;4。3CURRENTTIMESTAMP当前日期和时间
  语法12CURRENTTIMESTAMP函数CURRENTTIMESTAMP
  CURRENTTIMESTAMP函数具有CURRENTDATECURRENTTIME的功能。使用该函数可以同时得到当前的日期和时间,当然也可以从结果中截取日期或者时间。
  代码清单15取得当前日期和时间
  SQLServerPostgreSQLMySQLSELECTCURRENTTIMESTAMP;
  执行结果:now2016042518:31:03。70409
  该函数可以在SQLServer等各个主要的DBMS中使用〔5〕。但是,与之前的CURRENTDATE和CURRENTTIME一样,在Oracle和DB2中该函数的语法略有不同。特定的SQL
  Oracle和DB2使用如下写法可以得到与代码清单15相同的结果。其中需要注意的地方与CURRENTDATE时完全相同。
  Oracle
  指定临时表(DUAL)SELECTCURRENTTIMESTAMPFROMdual;
  DB2
  CURRENT和TIME之间使用了半角空格,指定临时表SYSIBM。SYSDUMMY1SELECTCURRENTTIMESTAMPFROMSYSIBM。SYSDUMMY1;4。4EXTRACT截取日期元素
  语法13EXTRACT函数EXTRACT(日期元素FROM日期)
  使用EXTRACT函数可以截取出日期数据中的一部分,例如年月,或者小时秒等(代码清单16)。该函数的返回值并不是日期类型而是数值类型。
  代码清单16截取日期元素
  PostgreSQLMySQLSELECTCURRENTTIMESTAMP,EXTRACT(YEARFROMCURRENTTIMESTAMP)ASyear,EXTRACT(MONTHFROMCURRENTTIMESTAMP)ASmonth,EXTRACT(DAYFROMCURRENTTIMESTAMP)ASday,EXTRACT(HOURFROMCURRENTTIMESTAMP)AShour,EXTRACT(MINUTEFROMCURRENTTIMESTAMP)ASminute,EXTRACT(SECONDFROMCURRENTTIMESTAMP)ASsecond;
  执行结果:nowyearmonthdayhourminutesecond2010042519:07:33。98709201042519733。987
  需要注意的是SQLServer也无法使用该函数。特定的SQL
  SQLServer使用如下的DATEPART函数会得到与代码清单16相同的结果。
  SQLServer
  SELECTCURRENTTIMESTAMP,DATEPART(YEAR,CURRENTTIMESTAMP)ASyear,DATEPART(MONTH,CURRENTTIMESTAMP)ASmonth,DATEPART(DAY,CURRENTTIMESTAMP)ASday,DATEPART(HOUR,CURRENTTIMESTAMP)AShour,DATEPART(MINUTE,CURRENTTIMESTAMP)ASminute,DATEPART(SECOND,CURRENTTIMESTAMP)ASsecond;
  Oracle和DB2想要得到相同结果的话,需要进行如下改变。注意事项与CURRENTDATE时完全相同。
  Oracle
  在FROM子句中指定临时表(DUAL)SELECTCURRENTTIMESTAMP,EXTRACT(YEARFROMCURRENTTIMESTAMP)ASyear,EXTRACT(MONTHFROMCURRENTTIMESTAMP)ASmonth,EXTRACT(DAYFROMCURRENTTIMESTAMP)ASday,EXTRACT(HOURFROMCURRENTTIMESTAMP)AShour,EXTRACT(MINUTEFROMCURRENTTIMESTAMP)ASminute,EXTRACT(SECONDFROMCURRENTTIMESTAMP)ASsecondFROMDUAL;
  DB2
  CURRENT和TIME之间使用了半角空格,指定临时表SYSIBM。SYSDUMMY1SELECTCURRENTTIMESTAMP,EXTRACT(YEARFROMCURRENTTIMESTAMP)ASyear,EXTRACT(MONTHFROMCURRENTTIMESTAMP)ASmonth,EXTRACT(DAYFROMCURRENTTIMESTAMP)ASday,EXTRACT(HOURFROMCURRENTTIMESTAMP)AShour,EXTRACT(MINUTEFROMCURRENTTIMESTAMP)ASminute,EXTRACT(SECONDFROMCURRENTTIMESTAMP)ASsecondFROMSYSIBM。SYSDUMMY1;五、转换函数
  最后将要给大家介绍一类比较特殊的函数转换函数。虽说有些特殊,但是由于这些函数的语法和之前介绍的函数类似,数量也比较少,因此很容易记忆。
  转换这个词的含义非常广泛,在SQL中主要有两层意思:一是数据类型的转换,简称为类型转换,在英语中称为cast〔6〕;另一层意思是值的转换。5。1CAST类型转换
  语法14CAST函数CAST(转换前的值AS想要转换的数据类型)
  进行类型转换需要使用CAST函数。
  之所以需要进行类型转换,是因为可能会插入与表中数据类型不匹配的数据,或者在进行运算时由于数据类型不一致发生了错误,又或者是进行自动类型转换会造成处理速度低下。
  这些时候都需要事前进行数据类型转换(代码清单17、代码清单18)。
  代码清单17将字符串类型转换为数值类型
  SQLServerPostgreSQLSELECTCAST(0001ASINTEGER)ASintcol;
  MySQLSELECTCAST(0001ASSIGNEDINTEGER)ASintcol;
  OracleSELECTCAST(0001ASINTEGER)ASintcolFROMDUAL;
  DB2SELECTCAST(0001ASINTEGER)ASintcolFROMSYSIBM。SYSDUMMY1;
  执行结果:intcol1
  代码清单18将字符串类型转换为日期类型
  SQLServerPostgreSQLMySQLSELECTCAST(20091214ASDATE)ASdatecol;
  OracleSELECTCAST(20091214ASDATE)ASdatecolFROMDUAL;
  DB2SELECTCAST(20091214ASDATE)ASdatecolFROMSYSIBM。SYSDUMMY1;
  执行结果:datecol20091214
  从上述结果可以看到,将字符串类型转换为整数类型时,前面的000消失了,能够切实感到发生了转换。
  但是,将字符串转换为日期类型时,从结果上并不能看出数据发生了什么变化,理解起来也比较困难。
  从这一点我们也可以看出,类型转换其实并不是为了方便用户使用而开发的功能,而是为了方便DBMS内部处理而开发的功能。5。2COALESCE将NULL转换为其他值
  语法15COALESCE函数COALESCE(数据1,数据2,数据3)
  COALESCE是SQL特有的函数。该函数会返回可变参数〔7〕中左侧开始第1个不是NULL的值。参数个数是可变的,因此可以根据需要无限增加。
  其实转换函数的使用还是非常频繁的。在SQL语句中将NULL转换为其他值时就会用到转换函数(代码清单19、代码清单20)。
  就像之前我们学习的那样,运算或者函数中含有NULL时,结果全都会变为NULL。能够避免这种结果的函数就是COALESCE。
  代码清单19将NULL转换为其他值
  SQLServerPostgreSQLMySQLSELECTCOALESCE(NULL,1)AScol1,COALESCE(NULL,test,NULL)AScol2,COALESCE(NULL,NULL,20091101)AScol3;
  OracleSELECTCOALESCE(NULL,1)AScol1,COALESCE(NULL,test,NULL)AScol2,COALESCE(NULL,NULL,20091101)AScol3FROMDUAL;
  DB2SELECTCOALESCE(NULL,1)AScol1,COALESCE(NULL,test,NULL)AScol2,COALESCE(NULL,NULL,20091101)AScol3FROMSYSIBM。SYSDUMMY1;
  执行结果:col1col2col31test20091101
  代码清单20使用SampleStr表中的列作为例子SELECTCOALESCE(str2,NULL)FROMSampleStr;
  执行结果:coalescertdef太郎NULLxyzNULLNULLNULLabcabci
  这样,即使包含NULL的列,也可以通过COALESCE函数转换为其他值之后再应用到函数或者运算当中,这样结果就不再是NULL了。
  此外,多数DBMS中都提供了特有的COALESCE的简化版函数(如Oracle中的NVL等),但由于这些函数都依存于各自的DBMS,因此还是推荐大家使用通用的COALESCE函数。参考文档是DBMS手册的一部分。大家也可以从介绍各种函数的书籍以及Web网站上获取相关信息。但是转换函数中的COALESCE函数除外。需要大家注意的是,该函数也存在和LENGTH函数同样的多字节字符的问题。详细内容请大家参考专栏对1个字符使用LENGTH函数有可能得到2字节以上的结果。如果想要了解日期函数的详细内容,目前只能查阅各个DBMS的手册。之前我们已经介绍过,在SQLServer中无法使用CURRENTDATE和CURRENTTIME函数。可能是因为在SQLServer中,CURRENTTIMESTAMP已经涵盖了这两者的功能吧。类型转换在一般的编程语言中也会使用,因此并不是SQL特有的功能。参数的个数并不固定,可以自由设定个数的参数。

去非洲打工时,为什么很少看见非洲老人?我在非洲打过几年工,在那里确实很少见到当地的老人,一开始我也纳闷,但是那里经历了几件让我不可思议的事情之后,我突然明白了这里面那让人有点不敢相信的原因。废话少说,直接进入主题。我去被拐孩子户口是如何被洗白的?对买家有赡养责任吗?普通民众领养孩子申报户口需要民政部门的许可证明,到派出所申请,由派出所进行审核,然后上报分局有关部门批准,才能入户。买孩子的人家肯定采取了非法手段申报了户口,有户籍部门审查不严或者事业编制有哪些分类,事业人员如何转变身份成为公务员或参公人员?现行事业编制分三种类型。一全额拨款事业编制顾名思义,工资待遇所需经费由国家全部拨给,执行事业单位管理条例的编制人员。全额事业编制主要存在两类事业单位一是公益一类事业单位,提供科教文广元楼市未来的发展会是怎样的?虽然广元是四川省一个地级市,但是它的独特的地理位置特别优越,有着2300多年的人文气息和建城历史,自古就是进入四川的主要通道,入蜀要塞,三国时期广元就是三国重镇,兵家必争之地。现在彩票开奖作假,造假者是否构成犯罪?今天刷视频看见的,两期两千万中奖得主,脖子上的痣在同一位置,有那么巧吗?不信可以去搜一下造假本来就是犯罪行为。不管是什么,造假都会对社会产生恶劣影响,何况是影响力那么大的彩票呢?自罪犯在监狱服刑改造中最怕什么?天塌下来他们都不会怕,就怕两个字加刑!我是一个在监狱工作十四余年的民警,看了很多对类似问题的解答,我想谈谈我个人对这个问题的见解!绝大多数人看到这个问题首先是从惩罚这两个字去理解,你胆子大的时候干过什么?三十多年前,我回家探亲,那个时候我们刚从老山前线回撤。我从小是外婆带大的,由于身处前线,我已经有好久没有见着外婆了,因此回家以后,我给父母说想去看望一下外婆。我妈妈是老师,当时正值在体制内,劳务派遣的人员有提拔的机会吗?身为体制内工作人员,我来回答一下这个问题。从法律的角度讲在体制内工作的劳务派遣人员,根本就不是体制内的在编人员,毫无疑问不可能有提拨的机会。为什么呢?先说体制内单位的范围。人们常说深圳光明新区政府周围有大型购物商场吗?我因为在玖龙台买了公寓,较为详细的了解了周边的环境,目前来看有几个一个是本月22日开业(我本人严重怀疑能否成功)的蓝琼世界,大约10万的商业面积,目前可能开业的都是二三线品牌多一点河南开封的房子现在值得买吗?西区房价78千,老城里面便宜些,哪儿买比较好?这个问题首先看自己,如果是外地的,还是别考虑了,当然你想安家在开封,喜欢这个城市的除外,这个时候就要考虑是刚需还是炒,刚需的话西区环境好,工厂多,就业机会相对多,老城区生活便利,旅银行七张信用卡逾期,最多一个20万,真的没能力还,会坐牢吗?刑法里面有信用卡诈骗罪,规定的构成该罪的最低金额是五万元。题主有七张信用卡,最高额度已达二十万元,而且没有能力偿还,那将是很棘手的难题。首先,发卡银行应该催收多次,而且还协商过如何
中国代表一带一路是团结之路共赢之路希望之路中新社联合国9月14日电中国常驻联合国代表团同联合国经社部14日共同举行携手合作,共享美好未来一带一路倡议支持联合国2030年可持续发展议程的进展报告发布会。中国常驻联合国代表张军除了黑白灰,秋冬更流行这3个颜色,简约又高级嗨,各位小仙女们,大家好呀!秋冬季节,颜色可是一大看点,除了经典百搭的黑白灰之外,今年秋冬似乎更流行这3个颜色,不仅简约还十分显高级!如果你早早厌倦了黑白灰这几个颜色,那么接下来L中国常驻联合国代表张军一带一路是团结之路共赢之路希望之路中国日报联合国9月14日电(记者张旻璐)当地时间14日,中国常驻联合国代表团同联合国经社部共同举行携手合作,共享美好未来一带一路倡议支持联合国2030年可持续发展议程的进展报告发布萝卜做馅,有人加盐,有人焯水?都不对,教你一妙招,鲜美不出水头条创作挑战赛萝卜做馅,有人加盐,有人焯水?都不对,教你一招,鲜美不出水大家都知道人参是好东西,一根能买到几百元,一般人可吃不起。而在农村有一种东西被称为赛人参,才几毛钱一斤,家家老舍戏剧节开幕献上50余场演出!20余部中外剧目将在各大小剧场陆续上演大戏看北京2022第六届老舍戏剧节昨天在天桥艺术中心正式开幕,根据鲁迅文学奖获得者冯骥才原著改编的话剧俗世奇人(右图)作为开幕大戏上演。从9月14日开始一直到12月中旬,20余部51965年海军专机降落海南文昌,寻一渔民毛主席请你参加国庆典礼1965年国庆前夕,一架海军飞机降落在海南文昌,这是海军司令部专门派过来的他们是来寻一个叫符气合的渔民。找到符气合后,工作人员说毛主席请你参加国庆典礼!村子的人知道后,非但没有奇怪恒大小将海归,告别西班牙!华裔前锋26球夺金靴,入国青已获推荐国足青训底子太薄,这些年的发展举步维艰,实力每况愈下,而且出现混乱的用人现象,归化了艾克森阿兰洛国富等人却未能物尽其用,导致战绩不升反降。国足现在还是要把希望放在年轻球员身上,而且一喝水就尿多,代表肾脏好还是不好?看完这5点,你会明白人体当中70是水分,这也足以证明水是生命之源,水和空气对人体而言是缺一,不可人可以不吃任何食物生存好几天,但是只要你三天不喝水就会立即死亡,所以水对人体而言至关重要。在保证充足水分在母亲追悼会上代表家人的答谢词各位领导各位来宾各位亲友世事无常终有定,人生有定却无常。2022年9月8日上午约9时10,我最亲爱的母亲走完了她88载的人生旅程,永远地离开了她挚爱着的儿女和亲友们。母亲虽然早已高中国批复探月工程四期,时隔半个世纪人类开启新一轮探月热潮中国批复探月工程四期,距离人类上一次从月球上离开,已过去整整50年,人类开启新一轮探月热潮。中国的月球探测工程,也叫嫦娥工程。嫦娥工程分为无人月球探测载人登月和建立月球基地三个阶段阅新闻中国探月工程有新进展据国家航天局的消息,我国探月工程有了新的进展。新进展指的是探月工程四期任务。该任务已获国家批复,包括嫦娥六号嫦娥七号和嫦娥八号任务,这三个任务将在未来十年之内陆续实施。嫦娥六号产品
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网