Data Type Conversion

Data type conversions can be achieved through either data type conversion functions or function cast($).

DolphinDB supports type conversion functions including 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, decimal32, decimal64, decimal128.

Each individual function has 3 usages:

  • Create a new variable with null value

  • Convert from a string

  • Convert from other data types

Note:
  • All these functions (except for symbol) accept zero or one parameter. If there is no input parameter, it creates a corresponding scalar object with a default value. If the parameter is a string or string vector, it will convert the string to the target data type accordingly. Other types are converted accordingly if they are semantically compatible.

  • The short, int, and long functions use rounding to convert floating-point numbers to integers, and use truncation to convert strings by discarding the fractional part of that given value.

string

// make a new string with default value ""
string()=="";
// output: 1

string(10);
// output: 10

typestr string(108.5);
// output: STRING

string(now());
// output: 2016.03.02T20:55:31.287

bool

x=bool();
x;
// output: 00b
typestr x;
// output: BOOL

bool(`true);
// output
1
bool(`false);
// output: 0

bool(100.2);
// output: 1

bool(0);
// output: 0

decimal32

a=decimal32(142, 2)
a
// output: 142.00
b=decimal32(1\7, 6)
b
// output: 0.142857
a+b
// output: 142.142857
a*b
// output: 20.28569400
decimal32("3.1415926535", 4)
// output: 3.1415

All elements in a DECIMAL-type vector must have the same data type and scale. For example:

d1=[1.23$DECIMAL32(4), 3$DECIMAL32(4), 3.14$DECIMAL32(4)];
// output: [1.2300,3.0000,3.1400]
typestr(d1);
// output: FAST DECIMAL32 VECTOR
//If the elements have different scales, the sever will create and ouput a tuple.​
d2=[1.23$DECIMAL32(4), 3$DECIMAL32(4), 3.14$DECIMAL32(3)];
// output: (1.2300,3.0000,3.140)
typestr(d2);
// output: ANY VECTOR

When converting data of STRING or SYMBOL types to DECIMAL, the behavior differs depending on the server version.

  • For versions earlier than 2.00.10, the extra digits exceeding the scale will be directly ​​truncated​.
    symbol(["1.341", "4.5677"])$DECIMAL32(2)
    // output: [1.34,4.56]
  • For versions 2.00.10 and later, the value will be rounded​ to the nearest valid decimal based on the specified scale.
    symbol(["1.341", "4.5677"])$DECIMAL32(2)
    // output: [1.34,4.57]

decimal64

a=decimal64(142, 2)
a
// output: 142.00
b=decimal64(1\7, 6)
b
// output: 0.142857
a+b
// output: 142.142857
a*b
// output: 20.28569400
decimal64("3.1415926535", 4)
// output: 3.1415

All elements in a DECIMAL-type vector must have the same data type and scale. For example:

d1=[1.23$DECIMAL64(4), 3$DECIMAL64(4), 3.14$DECIMAL64(4)];
// output: [1.2300,3.0000,3.1400]
typestr(d1);
// output: FAST DECIMAL64 VECTOR
//If the elements have different scales, the sever will create and ouput a tuple.​
d2=[1.23$DECIMAL64(4), 3$DECIMAL64(4), 3.14$DECIMAL64(3)];
// output: (1.2300,3.0000,3.140)
typestr(d2);
// output: ANY VECTOR

When converting data of STRING or SYMBOL types to DECIMAL, the behavior differs depending on the server version.

  • For versions earlier than 2.00.10, the extra digits exceeding the scale will be directly ​​truncated​.
    symbol(["1.341", "4.5677"])$DECIMAL64(2)
    // output: [1.34,4.56]
  • For versions 2.00.10 and later, the value will be rounded​ to the nearest valid decimal based on the specified scale.
    symbol(["1.341", "4.5677"])$DECIMAL64(2)
    // output: [1.34,4.57]

decimal128

a=decimal128(142, 2)
a
// output: 142.00
b=decimal128(1\7, 6)
b
// output: 0.142857
a+b
// output: 142.142857
a*b
// output: 20.28569400
decimal128("3.1415926535", 4)
// output: 3.1416

All elements in a DECIMAL-type vector must have the same data type and scale. For example:

d1=[1.23$DECIMAL128(4), 3$DECIMAL128(4), 3.14$DECIMAL128(4)]; 
// output: [1.2300,3.0000,3.1400]
typestr(d1);
// output: FAST DECIMAL128 VECTOR
//If the elements have different scales, the sever will create and ouput a tuple.
d2=[1.23$DECIMAL128(4), 3$DECIMAL128(4), 3.14$DECIMAL128(3)];
// output: (1.2300,3.0000,3.140)
typestr(d2);
// output: ANY VECTOR

int

x=int();
x;
// output: 00i

typestr x;
// output: INT

int(`10.9);
// output: 10

int(2147483647);
// output: 2147483647

// maximum value for an INT is 2^31-1=2147483647
int(2147483648);

// output: 00i

short

x=short();
x;
// output:00h

typestr x;
// output: SHORT

short(`12.3);
// output: 12

short(`120.9c);
// output: 120

short(32767);
// output: 32767


/ maximum value for a SHORT is 2^15-1=32767
short(32768);

// output: 00h

long

x=long();
x;
// output: 00l

typestr x;
// output: LONG

long(`10.9);
// output: 10

long(9223372036854775807l);
// output: 9223372036854775807

// maximum value for LONG is 2^63-1=9223372036854775807
long(9223372036854775808l);

// output: 9223372036854775807

char

x=char();
x;
// output: 00c
typestr x;

// output: CHAR

a=char(99);
a;

// output: 'c'

typestr a;

// output: CHAR

char(a+5);

// output: 'h'

double

x=double();
x;

// output: 00F

typestr x;

// output: DOUBLE

typestr double(`10);

// output: DOUBLE

double(`10.9);

// output: 10.9

double(now());

// output: 5.297834e+011

date

date();

// output: 00d

date(`2011.10.12);

// output: 2011.10.12

date(now());

// output: 2016.03.02

datehour

datehour(1)
// output: 1970.01.01T01
datehour(2012.06.13 13:30:10);
// output: 2012.06.13T13
datehour([2012.06.15 15:32:10.158,2012.06.15 17:30:10.008]);
// output: [2012.06.15T15,2012.06.15T17]
datehour(2012.01M)
// output: 2012.01.01T00

datetime

datetime(2009.11.10);

// output: 2009.11.10T00:00:00

typestr datetime(2009.11.10);

// output: DATETIME

datetime(now());

// output: 2016.03.02T20:51:10

timestamp

timestamp(2016.10.12);

// output: 2016.10.12T00:00:00.000

timestamp(2016.10.12)+1;

// output: 2016.10.12T00:00:00.001

timestamp(now());

// output: 2016.10.13T20:28:45.104

month


 month();

// output: 0M


 month(`2012.12m);


// output: 012.12M


/make a month variable from date

 month(2012.12.23);


// output: 012.12M

//make a month variable from timestamp

 month(now());


// output: 016.03M

second

second();

// output: 00s

second("19:36:12");

// output: 19:36:12

second(now());

// output: 20:50:31

minute

minute();

// output: 00m

minute(now());

// output: 20:49m

hour

hour(2012.12.03 01:22:01);
// output: 1

time

time();

// output: 00t

time("12:32:56.356");

// output: 12:32:56.356

time(now());

// output: 20:49:12.564

symbol

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

x;

// output: ["AMZN","AAPL","GOOG","FB","SNAP"]

typestr x;

// output: STRING VECTOR

y=symbol(x);

y;

// output: ["AMZN","AAPL","GOOG","FB","SNAP"]

typestr y;

// output: FAST SYMBOL VECTOR

nanotime

nanotime(1000000000);
// output: 00:00:01.000000000
nanotime(12:06:09 13:08:01);
// output: [12:06:09.000000000,13:08:01.000000000]
nanotime(2012.12.03 01:22:01.123456789);
// output: 01:22:01.123456789
nanotime('13:30:10.008007006');
// output: 13:30:10.008007006

nanotimestamp

nanotimestamp(1);
// output: 1970.01.01 00:00:00.000000001
nanotimestamp(1000000000);
// output: 1970.01.01 00:00:01.000000000
nanotimestamp(2012.12.03 12:06:09 2012.12.03 13:08:01);
// output: [2012.12.03 12:06:09.000000000,2012.12.03 13:08:01.000000000]
nanotimestamp(2012.12.03 01:22:01.123456789);
// output: 2012.12.03 01:22:01.123456789
nanotimestamp('2012.12.03 13:30:10.008007006');
// output: 2012.12.03 13:30:10.008007006
nanotimestamp(now());
// output: 2024.02.22 16:14:28.627000000
nanotimestamp(2012.01M)
// output: 2012.01.01T00:00:00.000000000

uuid

uuid("");
// output: 00000000-0000-0000-0000-000000000000
a=uuid("9d457e79-1bed-d6c2-3612-b0d31c1881f6");
a;
// output: 9d457e79-1bed-d6c2-3612-b0d31c1881f6
typestr(a);
// output: UUID

ipaddr

a=ipaddr("192.168.1.13");
a;
// output: 192.168.1.13
typestr(a);
// output: IPADDR

int128

a=int128("e1671797c52e15f763380b45e841ec32")
// output: e1671797c52e15f763380b45e841ec32
typestr(a);
// output: INT128

duration

y=duration("20H")
y
// output: 20H
typestr(y)
// output: DURATION
duration("3XNYS")
// output: 3XNYS

When the unit of time is not specified, the system defaults it as seconds (s):

t=table(take(2018.01.01T01:00:00+1..10,10) join take(2018.01.01T02:00:00+1..10,10) join take(2018.01.01T08:00:00+1..10,10) as time, rand(1.0, 30) as x);
select max(x) from t group by bar(time, 5);
bar_time max_x
2018.01.01T01:00:00 0.8824
2018.01.01T01:00:05 0.8027
2018.01.01T01:00:10 0.572
2018.01.01T02:00:00 0.8875
2018.01.01T02:00:05 0.8542
2018.01.01T02:00:10 0.4287
2018.01.01T08:00:00 0.9294
2018.01.01T08:00:05 0.9804
2018.01.01T08:00:10 0.2147

Specify the unit of time as minute (m) and group time column with 1-minute intervals:

select max(x) from t group by bar(time, 1m);
bar_time max_x
2018.01.01T01:00:00 0.8824
2018.01.01T02:00:00 0.8875
2018.01.01T08:00:00 0.9804

cast(X, dataTypeName) / $

x=3.1;
typestr x;

// output: DOUBLE

x=cast(x, int);
// can also use cast(x, INT)

x;
// output: 3
typestr x;
// output: INT

19.99$INT;
// output: 20

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

For more about the cast function please see cast.