@lumincinta
2017-01-25T05:28:20.000000Z
字数 1267
阅读 379
DB2 SQL
说起数据类型转换,我们得先了解一下DB2有哪些数据类型,请看下图:

从上图我们可以看出,DB2有四种数据类型,分别为数字、字符、日期、XML,由于XML数据类型很少使用,暂时我们不讨论,本文主要讨论数字、字符、日期之间的相互转换。
DB2为每种数据类型都提供了相应的函数,一般情况下它们之间的相互转换是非常简单的,DB2提供的函数有:
SMALLINT
INTEGER
BIGINT
DECIMAL
REAL
DOUBLE
CHAR
VARCHAR
LONG_VARCHAR
CLOB
GRAPHIC
VARGRAPHIC
LONG_VARGRAPHIC
DBCLOB
BLOB
DATE
TIME
TIMESTAMP
下面,我们看个简单的例子:
SELECT*FROM(--序号 姓名 生日VALUES('11','WAVE','1997-7-1'),('2','WAVE','1949-10-1')) AS USER(ID,NAME,BIRTHDAY)ORDER BYUSER.ID;
运行上面的SQL后,我们发现,它的排序方式并不是我们想要的排序方式,原因是序号(ID)列为字符型,要想得到我们想要的排序方式,我们可以将序号(ID)转化为数值型,如下:
SELECT*FROM(--序号 姓名 生日VALUES('11','WAVE','1997-7-1'),('2','WAVE','1949-10-1')) AS USER(ID,NAME,BIRTHDAY)ORDER BYINTEGER(USER.ID);
运行上面的SQL后,我们发现正是我们期望的结果。上面这些函数使用起来是非常简单的,这里我们就不一一介绍了。下面我们学习数据类型转换的另一种方法,CAST 表达式,如下SQL:
SELECTID,NAME AS NAME1,CAST(NAME AS CHAR(4) ) AS NAME2,SALARY AS SALARY1,CAST(SALARY AS INTEGER) AS SALARY2,CAST(NULL AS INTEGER) AS TEST_NULLFROM(--员工号 姓名 工资VALUES('11', 'ZHANGSAN',3000.5),('2','WANGWU',4000.1) )AS USER (ID,NAME,SALARY)ORDER BYCAST(ID AS INTEGER);
千万别着急运行上面的SQL,运行之前请仔细分析和思考一下这条语句的结果,然后再运行,看看和你分析的有什么不同。
上面的语句有四处用到了CAST表达式,如下:
CAST(NAME AS CHAR(4) )AS NAME2---将VARCHAR转换为CHARCAST(SALARY AS INTEGER) AS SALARY2, ---将DOUBLE转换为INTEGERCAST(NULL AS INTEGER) AS TEST_NULL---将NULL转换为INTEGERORDER BY CAST(ID AS INTEGER); ---将VARCHAR转换为INTEGER
分析结果我们发现,某些情况会发生数据截断,所以,使用CAST的时候请千万注意。
