[关闭]
@lumincinta 2017-01-25T05:28:20.000000Z 字数 1267 阅读 341

数据类型转换

DB2 SQL


说起数据类型转换,我们得先了解一下DB2有哪些数据类型,请看下图:

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  

下面,我们看个简单的例子:

  1. SELECT
  2. *
  3. FROM
  4. (
  5. --序号 姓名 生日
  6. VALUES
  7. ('11','WAVE','1997-7-1'),
  8. ('2','WAVE','1949-10-1')
  9. ) AS USER(ID,NAME,BIRTHDAY)
  10. ORDER BY
  11. USER.ID;

运行上面的SQL后,我们发现,它的排序方式并不是我们想要的排序方式,原因是序号(ID)列为字符型,要想得到我们想要的排序方式,我们可以将序号(ID)转化为数值型,如下:

  1. SELECT
  2. *
  3. FROM
  4. (
  5. --序号 姓名 生日
  6. VALUES
  7. ('11','WAVE','1997-7-1'),
  8. ('2','WAVE','1949-10-1')
  9. ) AS USER(ID,NAME,BIRTHDAY)
  10. ORDER BY
  11. INTEGER(USER.ID);

运行上面的SQL后,我们发现正是我们期望的结果。上面这些函数使用起来是非常简单的,这里我们就不一一介绍了。下面我们学习数据类型转换的另一种方法,CAST 表达式,如下SQL:

  1. SELECT
  2. ID,
  3. NAME AS NAME1,
  4. CAST(NAME AS CHAR(4) ) AS NAME2,
  5. SALARY AS SALARY1,
  6. CAST(SALARY AS INTEGER) AS SALARY2,
  7. CAST(NULL AS INTEGER) AS TEST_NULL
  8. FROM
  9. (
  10. --员工号 姓名 工资
  11. VALUES
  12. ('11', 'ZHANGSAN',3000.5),
  13. ('2','WANGWU',4000.1) )
  14. AS USER (ID,NAME,SALARY)
  15. ORDER BY
  16. CAST(ID AS INTEGER);

千万别着急运行上面的SQL,运行之前请仔细分析和思考一下这条语句的结果,然后再运行,看看和你分析的有什么不同。

上面的语句有四处用到了CAST表达式,如下:

  1. CAST(NAME AS CHAR(4) )AS NAME2---将VARCHAR转换为CHAR
  2. CAST(SALARY AS INTEGER) AS SALARY2, ---将DOUBLE转换为INTEGER
  3. CAST(NULL AS INTEGER) AS TEST_NULL---将NULL转换为INTEGER
  4. ORDER BY CAST(ID AS INTEGER); ---将VARCHAR转换为INTEGER

分析结果我们发现,某些情况会发生数据截断,所以,使用CAST的时候请千万注意。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注