数据类型转换

数据类型转换可以通过数据类型转换函数或函数 cast($) 来实现。

DolphinDB支持的数据类型转换函数包括 string, bool, char, short, int, long, double, date, month, time, second, minute, datetime, timestamp, symbol, nanotime, nanotimestamp, datehour, uuid, ipaddr, int128, blob, complex, point, duration.

每个这样的函数都有如下三个用处:

  • 创建一个新的 NULL 值变量。

  • 转换字符串。

  • 转换其他数据类型。

注意:

  • 除了 symbol 函数之外,所有这些函数都接受0或1个参数。如果没有设定参数,将创建一个默认值的标量。如果参数是字符串或字符串向量,可将它转换为目标数据类型。其他类型数据,只要语义上与目标数据类型相容,也会被转换。

  • short, int, long 函数采用四舍五入的方式将浮点数转换为整数。它们在转换字符串时,会逐位判断每个字符,并将数字保存到结果中,直到第一次遇到非数字字符,则立即返回结果。

string

// 创建一个新的字符串,默认值为""。
$ string()=="";
1

$ string(10);
10

$ typestr string(108.5);
STRING

$ string(now());
2016.03.02T20:55:31.287

bool

$ x=bool();
$ x;
00b
$ typestr x;
BOOL

$ bool(`true);
1
$ bool(`false);
0

$ bool(100.2);
1

$ bool(0);
0

int

$ x=int();
$ x;
00i
$ typestr x;
INT

$ int(`10.9);
10

$ int(2147483647);
2147483647

// INT 数据类型的最大值为 2^31-1=2147483647
$ int(2147483648);
00i

short

$ x=short();
$ x;
00h
$ typestr x;
SHORT

$ short(`12.3);
12

$ short(`120.9c);
120

$ short(32767);
32767

// SHORT 数据类型的最大值是 2^15-1=32767
$ short(32768);
00h

long

$ x=long();
$ x;
00l
$ typestr x;
LONG

$ long(`10.9);
10

$ long(9223372036854775807l);
9223372036854775807

// LONG 数据类型的最大值是2^63-1=9223372036854775807
$ long(9223372036854775808l);
9223372036854775807

char

$ x=char();
$ x;
00c
$ typestr x;
CHAR

$ a=char(99);
$ a;
'c'
$ typestr a;
CHAR
$ char(a+5);
'h'

double

// 创建一个 DOUBLE 类型的变量,默认值为0。
$ x=double();
$ x;
00F
$ typestr x;
DOUBLE

$ typestr double(`10);
DOUBLE

$ double(`10.9);
10.9

$ double(now());
5.297834e+011

date

$ date();
00d

$ date(`2011.10.12);
2011.10.12

$ date(now());
2016.03.02

datetime

$ datetime(2009.11.10);
2009.11.10T00:00:00
$ typestr datetime(2009.11.10);
DATETIME

$ datetime(now());
2016.03.02T20:51:10

timestamp

$ timestamp(2016.10.12);
2016.10.12T00:00:00.000

$ timestamp(2016.10.12)+1;
2016.10.12T00:00:00.001

$ timestamp(now());
2016.10.13T20:28:45.104

month

$ month();
00M

$ month(`2012.12);
2012.12M

// 把一个 DATE 类型的数据转换成 MONTH 类型。
$ month(2012.12.23);
2012.12M

// 把一个 TIMESTAMP 类型的数据转换成 MONTH 类型。
$ month(now());
2016.03M

second

$ second();
00s

$ second("19:36:12");
19:36:12

$ second(now());
20:50:31

minute

$ minute();
00m

$ minute(now());
20:49m

time

$ time();
00t

$ time("12:32:56.356");
12:32:56.356

$ time(now());
20:49:12.564

symbol

$ x=`AMZN`AAPL`GOOG`FB`SNAP;

$ x;
["AMZN","AAPL","GOOG","FB","SNAP"]

$ typestr x;
STRING VECTOR

$ y=symbol(x);

$ y;
["AMZN","AAPL","GOOG","FB","SNAP"]

$ typestr y;
FAST SYMBOL VECTOR

nanotime

$ nanotime(1000000000);
00:00:01.000000000

$ nanotime(12:06:09 13:08:01);
[12:06:09.000000000,13:08:01.000000000]

$ nanotime(2012.12.03 01:22:01.123456789);
01:22:01.123456789

$ nanotime('13:30:10.008007006');
13:30:10.008007006

nanotimestamp

$ nanotimestamp(1000000000);
1999.12.31T00:00:01.000000000

$ nanotimestamp(2012.12.03 12:06:09 2012.12.03 13:08:01);
[2012.12.03T12:06:09.000000000,2012.12.03T13:08:01.000000000]

$ nanotimestamp(2012.12.03 01:22:01.123456789);
2012.12.03T01:22:01.123456789

$ nanotimestamp('2012.12.03 13:30:10.008007006');
2012.12.03T13:30:10.008007006

datehour

$ datehour(2012.06.13 13:30:10);
2012.06.13T13

$ datehour([2012.06.15 15:32:10.158,2012.06.15 17:30:10.008]);
[2012.06.15T15,2012.06.15T17]

uuid

$ uuid("");
00000000-0000-0000-0000-000000000000

$ a=uuid("9d457e79-1bed-d6c2-3612-b0d31c1881f6");
$ a;
9d457e79-1bed-d6c2-3612-b0d31c1881f6

$ typeStr(a);
UUID

ipaddr

$ a=ipaddr("192.168.1.13");
$ a;
192.168.1.13

$ typestr(a);
IPADDR

int128

$ a=int128("e1671797c52e15f763380b45e841ec32")
e1671797c52e15f763380b45e841ec32

$ typestr(a);
INT128

duration

$ a=duration("1M");
$ a;
1M

$ typestr(a)
DURATION

cast(X, dataTypeName) / $

$ x=3.1;
$ typestr x;
DOUBLE

$ x=cast(x, int);
// 也可以使用 cast(x, INT)

$ x;
3
$ typestr x;
INT

$ 19.99$INT;
20

$ syms =`IBM`C`MS`MSFT`JPM`ORCL`BIDU`SOHU
$ typestr syms;
STRING VECTOR
$ syms=syms$SYMBOL;
$ typestr syms;
FAST SYMBOL VECTOR

关于 cast 函数的更多说明,请参照 cast.