达梦数据库DMSQL 程序数据类型的相关介绍

一、达梦数据库数据类型

        DMSQL 程序支持所有的 DM SQL 数据类型,包括:精确数值数据类型、近似数值数据
类型、字符数据类型、多媒体数据类型、一般日期时间数据类型、时间间隔数据类型。 此外,为了进一步提高 DMSQL 程序的程序设计属性, DMSQL 程序还扩展支持了%TYPE %ROWTYPE 、记录类型、数组类型、集合类型和类类型,用户还可以定义自己的 子类型。

二、常规数据类型

数值数据类型:
NUMERIC 类型
语法如下:
        NUMERIC[( 精度 [, 标度 ])]
功能:
        
        NUMERIC 数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了
总的数字数,精度范围是 1~38 ;标度定义了小数点右边的数字位数。定义时如果省略精度,
则缺省为 16 ;如果省略标度,则缺省为 0 。一个数值的标度不应大于其精度。
        例如:NUMERIC(4,1) 定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围
-999.9 999.9 。所有 NUMERIC 数据类型,如果其值超过精度,达梦数据库返回一个
出错信息,如果超过标度,则多余的位截断。
如果不指定精度和标度,缺省精度为 38
        注意, NUMBER 类型,DECIMAL/DEC 类型 NUMERIC 类型相同。
BIT 类型
语法如下:
        BIT
功能:
        BIT 类型用于存储整数数据 1 0 NULL ,可以用来支持 ODBC JDBC 的布尔数据
类型。 DM BIT 类型与 SQL SERVER2000 BIT 数据类型相似。
        注意,PLS_INTEGER 类型
        
BIGINT 类型
语法如下:
        BIGINT
功能:
        用于存储有符号整数,精度为 19 , 标 度 为 0 。 取 值 范 围 为 : -
9223372036854775808(-2^63)~+9223372036854775807(2^63-1)
TINYINT 类型
语法如下:
        TINYINT
功能:
        用于存储有符号整数,精度为 3,标度为 0 。取值范围为: -128~+127
BYTE 类型
语法如下:
        BYTE
功能:
        与 TINYINT 类型相似,精度为 3 ,标度为 0
SMALLINT 类型
语法如下:
        SMALLINT
功能:
        用 于 存 储 有 符 号 整 数 , 精 度 为 5 , 标 度 为 0 。 取 值 范 围 为 : -32768(-2 15 )~
+32767(2 15 -1)
BINARY 类型
语法如下:
        BINARY[(长度 )]
功能:
        BINARY 数据类型指定定长二进制数据。缺省长度为 1 个字节,最大长度由数据库页面
大小决定
BINARY 常量以 0x 开始,后跟数据的十六进制表示,例如: 0x2A3B4058
FLOAT 类型
语法如下:
        FLOAT[(精度 )]
功能:
        FLOAT 是带二进制精度的浮点数,精度最大不超过 53 ,如省略精度,则二进制精度为
53 ,十进制精度为 15 。取值范围为 -1.7E+308~1.7E+308
DOUBLE 类型
语法如下:
        DOUBLE[(精度 )]
功能:
        同 FLOAT 类型相似,精度最大不超过 53
字符数据类型:
CHAR/CHARACTER 类型
语法如下:
        CHAR[(长度 )]
        CHARACTER[(长度 )]
功能:
        定长字符串,最大长度由数据库页面大小决定,长度不足时,自动填充空格。
VARCHAR 类型
语法如下:
        VARCHAR[(长度 )]
功能:
        可变长字符串,最大长度由数据库页面大小决定
        功能:CHAR 数据类型指定定长字符串。在基表中,定义 CHAR 类型的列时,可以指
定一个不超过 32767 的正整数作为字节长度,例如: CHAR(100) 。如果未指定长度,缺省
1 CHAR 类型列的最大存储长度由数据库页面大小决定。但是,在表达式计算中,该类型的长度上限不受页面大小限制,为 32767
        
        功能:VARCHAR 数据类型指定变长字符串,用法类似 CHAR 数据类型,可以指定一
个不超过 32767 的正整数作为字节或字符长度,例如: VARCHAR (100) 指定 100 字节长
度; VARCHAR(100 CHAR) 指定 100 字符长度。如果未指定长度,缺省为 8188 字节。
        在基表中,当没有指定 USING LONG ROW 存储选项时,插入 VARCHAR 数据类型的
实际最大存储长度由数据库页面大小决定 ;如果指定了 USING LONG ROW 存储选项,则插入 VARCHAR 数据类型的长度不受数据库页面大小限制。
        VARCHAR 类型在表达式计算中的长度上限不受页面大小限制,为 32767
        CHAR 同 VARCHAR 的区别在于前者长度不足时,系统自动填充空格,而后者只占用
实际的字节空间。另外,实际插入表中的列长度要受到记录长度的约束,每条记录总长度不
能大于页面大小的一半。
一般日期时间数据类型:
        
DATE 类型
语法如下:
        DATE
功能:
        DATE 类型包括年、月、日信息,定义了 '-4712-01-01' '9999-12-31' 之间任何一个有
效的格里高利日期。
TIME 类型
语法如下:
        TIME[(小数秒精度 )]
功能:

        TIME 类型包括时、分、秒信息,定义了一个在 '00:00:00.000000' 和 '23:59:59.999999'之间的有效时间。TIME 类型的小数秒精度规定了秒字段中小数点后面的 位数,取值范围为 0~6,如果未定义,缺省精度为 0。

TIMESTAMP/DATETIME 类型
语法如下:
        TIMESTAMP[(小数秒精度 )]
        DATETIME[(小数秒精度 )]
功能:
        TIMESTAMP/DATETIME 类型包括年、月、日、时、分、秒信息,定义了一个在 '-4712-
01-01 00:00:00.000000' '9999-12-31 23:59:59.999999' 之间的有效格里高利日期时间。

小数秒精度规定了秒字段中小数点后面的位数,取值范围为 0~6,如果未定义,缺省精度为 6

时区数据类型:

TIME WITH TIME ZONE 类型
语法如下:
        TIME[ ( 小数秒精度 ) WITH TIME ZONE
功能:
        描述一个带时区的 TIME 值,其定义是在 TIME 类型的后面加上时区信息。时区部分的
实质是 INTERVAL HOUR TO MINUTE 类型,取值范围: -12:59 +14:00 之间。例如:
TIME '09:10:21 +8:00'
TIMESTAMP WITH TIME ZONE 类型
语法如下:
        TIMESTAMP[ ( 小数秒精度 ) WITH TIME ZONE
功能:
        描述一个带时区的 TIMESTAMP 值,其定义是在 TIMESTAMP 类型的后面加上时区信息。
时区部分的实质是 INTERVAL HOUR TO MINUTE 类型,取值范围: -12:59 +14:00 之间。
例如: ’2009-10-11 19:03:05.0000 -02:10’

BOOL/BOOLEAN 数据类型
语法如下:
        BOOL
        BOOLEAN
功能:
        布尔数据类型:TRUE FALSE DMSQL 程序的布尔类型和 INT 类型可以相互转化。如
果变量或方法返回的类型是布尔类型,则返回值为 0 1 TRUE 和非 0 值的返回值为 1
FALSE 0 值返回为 0

三、一些实操的sql

定义了一些类型,包括 NUMERIC,BIGINT  ,FLOAT 类型 将这些类型的对象分别赋值,然后输出在终端当中

DECLARE
  numericValue NUMERIC(10, 2); //小数类型,小数点前最多8位,小数点后最多两位
  bigintValue BIGINT;  
  floatValue FLOAT;

BEGIN
  SET numericValue = 12345678.45;
  SET bigintValue = 1000000000;
  SET floatValue = 3.14;

  print(numericValue);  //print函数输出值
  print(bigintValue);
  print(bigintValue);


END;

这段sql代码是用来定义个人信息,并根据年龄判断相关信息的:

DECLARE部分定义了4个变量:

name:名 VARCHAR(50)
age:年龄 INT
gender:性别 CHAR(1)
message:相关信息 VARCHAR(100)

BEGIN开始执行主体语句:
设置name, age, gender变量的值

IF-ELSE语句块判断age>=18后设置message变量的值:

若age>=18,message设置为'Adult'
否则message设置为'Minor'

print语句输出变量的值,最终输出个人信息和相关结果:
名字,年龄,性别,根据年龄判断的信息("Adult"或"Minor")

DECLARE
  name VARCHAR(50);
  age INT;
  gender CHAR(1);
  message VARCHAR(100);

BEGIN
  SET name = 'John Smith';
  SET age = 30;
  SET gender = 'M';

  IF age >= 18
  BEGIN
    SET message = 'Adult';
  END
  ELSE
  BEGIN
    SET message = 'Minor';
  END;
	print('名字:'||name);
	print('年龄:'||age);
	print('性别:'||gender);
	print('相关信息:'||message);
END;

结果如图:

以下这段PL/SQL代码用来判断当前时间是否晚于GMT+8时区的指定时间:

DECLARE 引入两个变量:

v_gmt8,类型为TIMESTAMP WITH TIME ZONE,用于存储GMT+8时区的指定时间
is_gmt8_or_greater,类型为BOOL,用于存储当前时间是否晚于v_gmt8的判断结果
第一行SELECT语句将'2020-01-01 08:00:00 +8:00'(GMT+8时区)赋值给v_gmt8

第二行SELECT语句使用CASE WHEN判断 v_gmt8是否小于CURRENT_TIMESTAMP,结果赋值给is_gmt8_or_greater

判断is_gmt8_or_greater的值,如果为TRUE:

执行BEGIN内的print语句,输出v_gmt8+"是更小于当前时间"的结果
如果为FALSE:

执行else块内的print语句,输出v_gmt8+"是更大于当前时间"的结果

DECLARE 
  v_gmt8 TIMESTAMP WITH TIME ZONE;
  is_gmt8_or_greater BOOL;
BEGIN

  SELECT TIMESTAMP '2020-01-01 08:00:00 +8:00'  INTO v_gmt8;

  SELECT 
    CASE 
      WHEN v_gmt8 < CURRENT_TIMESTAMP THEN true
      ELSE false
    END INTO is_gmt8_or_greater
  FROM DUAL;
  
  if is_gmt8_or_greater
  BEGIN
  print(v_gmt8 || ' is  smaller than current timestamp:'||CURRENT_TIMESTAMP );
  END
  else
  begin
  print(v_gmt8 || ' is  bigger than current timestamp:' ||CURRENT_TIMESTAMP);
  end;
  
END;
/

结果如图所示:

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值