admin 管理员组

文章数量: 887021


2024年1月25日发(作者:usb device是什么)

一般我们在使用DB2或Oracle的过程中,经常会在数字<->字符<->日期三种类型之间做转换,那么在DB2和Oracle中,他们分别是如何实现的呢?在Oracle这几个类型之间的转换是十分方便的,通过to_char|to_date|to_number函数即可完成类型转换。本小节主要介绍DB2中的一些知识,从Oracle转过来的DBA或开发人员,可以对比着学习。

数字型到字符型的转换

测试一下:

SQL>create table test_datatypeSQL>(SQL>col_a smallint,SQL>col_b integer,SQL>col_c

bigint,SQL>col_d decimal(8,2),SQL>col_e doubleSQL>);DB20000I SQL命令成功完成。

SQL>insert into test_datatype values(1,20,3000,4000.44,55555);DB20000I SQL命令成功完成。

SQL>describe select * from test_datatype列信息

列数:5

SQL 类型 类型长度 列名 名称长度

-------------------- ----------- ------------------------------ -----------

501 SMALLINT 2 COL_A

5

497 INTEGER 4 COL_B

5

493 BIGINT 8 COL_C 5

485 DECIMAL 8, 2 COL_D 5

481 DOUBLE 8 COL_E

5

SQL>select * from test_datatype;COL_A COL_B COL_C COL_D

COL_E

------ ----------- -------------------- ---------- ------------------------

1 20 3000 4000.44 +5.5555E+004

1 条记录已选择。

SQL>select char(col_a),char(col_b),char(col_c),digits(col_d),char(cast(col_e as decimal(8,2))) from

test_datatype;1 2 3 4 5

------ ----------- -------------------- -------- ----------

1 20 3000 00400044 055555.00

1 条记录已选择。

SQL>select char(col_a)||','||char(col_b)||','||char(col_c)||','||digits(col_d)||','||char(cast(col_e

as decimal(8,2))) from test_datatype;1

-----------------------------------------------------------

1 ,20 ,3000 ,00400044,055555.00

1 条记录已选择。

SQL>字符型到数字型的转换

DB2中的col_a字段

字段类型 数字类型 转换

char smallint Integer(trim(char(col_a)))

integer

bigint cast(char(col_a) as bigint)

decimal cast(col_a as decimal(8,2))

double cast(cast(char(cast(_a as decimal(8,2))) as decimal(8,2)) as double)

测试一下

SQL>create table test_datatypeSQL>(SQL>col_a char(2),SQL>col_b char(4),SQL>col_c

char(10),SQL>col_d char(10),SQL>col_e char(10)SQL>);DB20000I SQL命令成功完成。

SQL>insert into test_datatype values('1','200','30000','4000.04','5000000');DB20000I SQL命令成功完成。

SQL>describe select * from test_datatype;列信息

列数:5

SQL 类型 类型长度 列名 名称长度

-------------------- ----------- ------------------------------ -----------

453 CHARACTER 2 COL_A

5

453 CHARACTER 4 COL_B

5

453 CHARACTER 10 COL_C

5

453 CHARACTER 10 COL_D

5

453 CHARACTER 10 COL_E

5

SQL>select Integer(trim(char(col_a))),SQL>Integer(trim(char(col_b))),SQL>cast(char(col_c) as

bigint),SQL>cast(col_d as decimal(8,2)),SQL>cast(cast(char(cast(col_e as decimal(12,2))) as

decimal(12,2)) as double)SQL>from test_datatype;1 2 3

4 5

----------- ----------- -------------------- ---------- ------------------------

1 200 30000 4000.04

+5.00E+006

1 条记录已选择。

SQL>字符型到日期时间型的互换

DB2中的col_a字段

字段类型 日期时间型

char

date(trim(char(col_a)))

timestamp(trim(char(col_a)))或to_date(--string-expression,format-string(DB2 9)

注:to_date实际是TIMESTAMP_FORMAT函数的一个同义词

字段类型 字符类

date char(col_a)

time

timestamp char(col_a) 或 to_char(--timestamp-expression--,format-string--) (DB2 9)

注:to_char实际是VARCHAR_FORMAT函数的一个同义词

测试一下看看

SQL>select date(trim(char('2009-09-01 '))),SQL>time(trim(char('12:23:34

'))),SQL>timestamp(trim(char('2009-02-26-14.28.40.234000'))) from ;1 2

3

---------- -------- --------------------------

2009-09-01 12:23:34 2009-02-26-14.28.40.234000

1 条记录已选择。

SQL>select char(current date),char(current time),char(current timestamp) from ;1

2 3

---------- -------- --------------------------

2009-02-26 14:28:40 2009-02-26-14.28.40.234000

1 条记录已选择。

SQL>select to_char(current timestamp,'yyyy-mm-dd hh24:mi:ss') from ;--DB2 9版本中新增

1

--------------------------

2009-02-26 14:45:53

1 条记录已选择。

SQL>select to_date('2009-01-01 12:23:45','yyyy-mm-dd hh24:mi:ss') from ;--DB2 9版本中新增

1

--------------------------

2009-01-01-12.23.45.000000

1 条记录已选择。


本文标签: 类型 完成 对比 字符 转换