@lumincinta
2017-01-25T05:28:20.000000Z
字数 1267
阅读 341
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 BY
USER.ID;
运行上面的SQL后,我们发现,它的排序方式并不是我们想要的排序方式,原因是序号(ID)列为字符型,要想得到我们想要的排序方式,我们可以将序号(ID)转化为数值型,如下:
SELECT
*
FROM
(
--序号 姓名 生日
VALUES
('11','WAVE','1997-7-1'),
('2','WAVE','1949-10-1')
) AS USER(ID,NAME,BIRTHDAY)
ORDER BY
INTEGER(USER.ID);
运行上面的SQL后,我们发现正是我们期望的结果。上面这些函数使用起来是非常简单的,这里我们就不一一介绍了。下面我们学习数据类型转换的另一种方法,CAST 表达式,如下SQL:
SELECT
ID,
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_NULL
FROM
(
--员工号 姓名 工资
VALUES
('11', 'ZHANGSAN',3000.5),
('2','WANGWU',4000.1) )
AS USER (ID,NAME,SALARY)
ORDER BY
CAST(ID AS INTEGER);
千万别着急运行上面的SQL,运行之前请仔细分析和思考一下这条语句的结果,然后再运行,看看和你分析的有什么不同。
上面的语句有四处用到了CAST表达式,如下:
CAST(NAME AS CHAR(4) )AS NAME2---将VARCHAR转换为CHAR
CAST(SALARY AS INTEGER) AS SALARY2, ---将DOUBLE转换为INTEGER
CAST(NULL AS INTEGER) AS TEST_NULL---将NULL转换为INTEGER
ORDER BY CAST(ID AS INTEGER); ---将VARCHAR转换为INTEGER
分析结果我们发现,某些情况会发生数据截断,所以,使用CAST的时候请千万注意。