(1)SQL支持的基本域类型(基本数据类型)包括:
·char(n):固定长度的字符串,用户指定长度n。也可以用全称character
·varchar(n):可变长度的字符串,用户指定最大长度n。等价于全称character varying
·bigint:大整形,占8个字节
·int:整形,占用四个字节。等价于integer
·smallint:小整形,占用两个字节,即-32768~32767
·tinyint:微整形,占用一个字节,0~255
·numeric(p,d):定点数,精度由用户指定
·real,double precision:浮点数与双精度浮点数,精度与机器有关
·float(n):精度至少为n位的浮点数
(2)SQL内建的数据类型(时间类型)
·date:日历日期,包括年(四位)、月和日;
·time:一天中的时间,包括小时、分和秒。可以用一个变量time(p)来表示秒的小数点后的数字(这里的默认值为0)。通过指定时间的时区,也可以把时区连同时间一起存储。
·timestamp:date和time组合的变量,可以用一个变量timestamp(p)表示秒的小数后的数字(这里默认值为6)。如果with timezone被指定,则时区信息也会被存储。
具体的实例:
date ‘2020-06-06’
time ’17:06:00’
timestamp ‘2020-06-06 17:06:00.12’
(3)将字符串转换成时间:使用cast(e as t)的形式来完成,它可以将字符串e转换成t类型的时间变量(date、time、timestamp中的一种),字符串的格式必须符合正确的格式。当需要时区信息时,时区信息将从系统设置中得到。注意:e as t在cast的括号中,否则报错。例如:
insert into person values(1, ‘Lisa‘, cast(‘1995-10-05‘ as date), TIMESTAMP(‘2020-06-05 17:34:12.23‘));
(4)时间提取:使用extract(field from d)来提取日期或时间d中的某一个域,field可以是year、month、day、hour、minute或者second中的任意一种。时区信息可以用timezone_hour和timezone_minute提取。例如:
select extract(year from birthday) as birthday_year from person where id = 1;
结果:
(5)获取当前的日期和时间
current_date返回当前时间(带时区)[select current_time;]、localtime返回当前的本地时间(不带时区)
current_timestamp和localtimestamp获取的是timestamp的时间
(6)计算时间间隔:SQL支持interval关键词,表示两个时间的间隔,比如两个date变量相减就是两个时间相隔的天数;(time相减就是秒数)。例如:
select birthday - current_date from person where id = 1;
(7)独特类型(mysql使用一直报错,可能是不支持)
独特类型的概念主要解决的是拥有相同基本类型的数据可能具有不同意义解决的,例如:
我们定义人民币和美元两种货币类型
create type yuan as numeric(12, 2) final; create type dollars as numeric(12, 2) final;
(8)大对象类型
如果要在数据库中存储视频、音频或者高清的图片时,其数据量往往很大,SQL支持两种大对象数据类型来存储这些数据,分别为字符数据的大对象类型clob(char large object)和二进制数据的大对象类型blob(binary large object),使用方式举例如下:
CREATE TABLE big ( id int, book_review blob, image blob, movie blob );
注:大对象一般用于外部应用,不建议使用。