数据类型转换
数据类型转换可以通过数据类型转换函数或函数 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.