Parent Previous Next


数据类型


DolphinDB支持以下数据类型:

名字

ID

举例

数据类型符号

字节数

分类

范围

VOID

0

NULL


1

Void


BOOL

1

1b, 0b, true, false

b

1

Logical

0~1

CHAR

2

'a', 97c

c

1

Integral

-27+1~27-1

SHORT

3

122h

h

2

Integral

-215+1~215-1

INT

4

21

i

4

Integral

-231+1~231-1

LONG

5

22l

l

8

Integral

-263+1~263-1

DATE

6

2013.06.13

d

4

Temporal


MONTH

7

2012.06M

M

4

Temporal


TIME

8

13:30:10.008

t

4

Temporal


MINUTE

9

13:30m

m

4

Temporal


SECOND

10

13:30:10

s

4

Temporal


DATETIME

11

2012.06.13 13:30:10 or 2012.06.13T13:30:10

D

4

Temporal


TIMESTAMP

12

2012.06.13 13:30:10.008 or 2012.06.13T13:30:10.008

T

8

Temporal


NANOTIME

13

13:30:10.008007006

n

8

Temporal


NANOTIMESTAMP

14

2012.06.13 13:30:10.008007006 or

2012.06.13T13:30:10.008007006

N

8

Temporal


FLOAT

15

2.1f

f

4

Floating


DOUBLE

16

2.1

F

8

Floating


SYMBOL

17


S

4

Literal


STRING

18

"Hello" or 'Hello' or `Hello

W


Literal


UUID

19

5d212a78-cc48-e3b1-4235-b4d91473ee87


16

Literal


FUNCTIONDEF

20

def f1(a,b) {return a+b;}



System


HANDLE

21

file handle, socket handle, and db handle



System


CODE

22

<1+2>



System


DATASOURCE

23




System


RESOURCE

24




System


ANY

25

(1,2,3)



Mixed


ANY DICTIONARY

27

{a:1,b:2}



Mixed


DATEHOUR

28

2012.06.13T13


4

Temporal


IPADDR

30

192.168.1.13


16

Literal


INT128

31

e1671797c52e15f763380b45e841ec32


16

Integral



说明:


1. SYMBOL是特殊的字符串类型。

2. ANY DICTIONARY是DolphinDB中表示JSON的数据类型。

3. DATEHOUR类型目前只能通过datehour函数生成。


类型检查


我们提供typestrtype这两个函数来检查数据类型。typestr返回的是数据类型的名称(字符串常量);type返回的是数据类型ID(整数)。



>typestr 3l;

LONG


>type 3l;

5


>x=3;

>if(type(x) == INT){y=10};

>y;

10



数据范围


整型的数据范围在上面表格中已经列出。对于整数类型的数据,DolphinDB使用允许最小值-1来表示其相应的NULL值。例如,-128c是一个NULL字符。 对于NULL值,请参见第6章:NULL值



>x=-128c;

>x;

00c

>typestr x;

CHAR



数据类型符号


数据类型符号用于声明常量的数据类型。 在下面的第一个例子中,没有为3指定数据类型符号。在这种情况,3被默认作为整数存储在内存中。 如果要保存为浮点数,则应声明为3f(float)或3F(double)。



>typestr 3;                        

INT

                               

>typestr 3f;                        

FLOAT


>typestr 3F;                        

DOUBLE


>typestr 3l;                        

LONG


>typestr 3h;                        

SHORT


>typestr 3c;                        

CHAR


>typestr 3b;                        

BOOL



字符串


我们可以在DolphinDB中把字符串保存为symbol类型数据。 一个symbol类型数据被DolphinDB系统内部存储为一个整数,因此数据排序和比较更有效率。 因此,使用symbol类型向量有可能提高系统性能,同时也可节省存储空间。 但是,将字符串映射到整数(hash)需要时间,哈希表也会占用内存。


以下规则可以帮助您决定是否使用symbol类型:


这里举两个例子:


例1:排序比较:同样排序300万条记录,排序SYMBOL向量比STRING快40倍。



>n=3000000

strs=array(string,0,n)

strs.append!(rand(`IBM`C`MS`GOOG, n))

timer sort strs;

Time elapsed: 482.027 ms


>n=3000000

syms=array(symbol,0,n)

syms.append!(rand(`IBM`C`MS`GOOG, n))

timer sort syms;

Time elapsed: 12.001 ms                



例2:布尔运算比较:同样是300万条记录的运算,SYMBOL向量几乎是STRING向量的15倍。



>timer(100){strs>`C};

Time elapsed: 4661.26 ms


>timer(100){syms>`C};

Time elapsed: 322.655 ms



SYMBOL类型向量的创建


(1) 使用函数array来创建。



>syms=array(symbol, 0, 100);                

// 创建大小为100的空符号数组;


>typestr syms;

FAST SYMBOL VECTOR

>syms.append!(`IBM`C`MS);

>syms;

["IBM","C","MS"]



(2) 通过类型转换



>syms=`IBM`C`MS;                        

>typestr syms;

STRING VECTOR


// 转换为符号向量;

>sym=syms$SYMBOL;                        


>typestr sym;

FAST SYMBOL VECTOR

>typestr syms;

STRING VECTOR



(3) 使用随机函数rand.



>syms=`IBM`C`MS;                        

>symRand=rand(syms, 10);

//生成一个随机的symbol类型向量

               

>symRand;                                        

["IBM","IBM","IBM","MS","C","C","MS","IBM","C","MS"]

>typestr symRand;

FAST SYMBOL VECTOR



请注意,在上面的例子中,当rand函数的输入是一个字符串向量时,它会生成一个symbol类型的向量。 rand函数不会更改任何其他的输入数据类型。我们设计这个函数时有意做出这个例外,这是因为当用户基于字符串向量生成随机向量时,在大多数情况下,他们希望使用symbol类型向量。


整数溢出


当运算的结果超出了运算中调用的变量的数据类型的范围时,就会出现溢出。在DolphinDB中,整数溢出的结果为NULL。


下例中,变量x的数据类型为INT,它被赋予INT类型允许的最大值,为232-1。x+1的结果超出INT类型的上限,因此x+1的结果为NULL。



>x=(pow(2,31)-1)$INT;

>x+1;

00i