前言
KDB有着自己独特的语言,那就是Q语言。首先先介绍Q语言的基本数据类型,Q语言的基本数据类型就是:Atoms(我在这就理解为原子吧,如果有更好的理解欢迎指正)。
下面将从Integer Data(整形数据)、Floating Point Data(浮点型数据)、Binary Data(二进制数据)、Text Data(文本数据)、Temporal Data(时间数据)、Arithmetic Infinities and Nulls(数学数据)等几个方面来介绍。
首先可以了解一下Q语言的数据类型与SQL、Java、.NET的数据类型有哪些区别。
Q数据类型与其他编程语言的区别Q语言没有了其他语言中常见的string类型,改为了symbol类型(感觉很奇特,在后面的学习当中用到的太多了)。下面是Q语言的常见数据类型,可以看书Q语言将table(表)、enumeration(枚举)、dictionary(字典)、function(函数)、nil item(无效)也算作一种数据类型。
Q语言数据类型表一、整型
整型包含了三种数据类型,分别为long、short和int,都是整数类型,只是所占的空间大小不同。可以利用type命令查看数据类型,返回的结果就是该数据类型的Numtype。
q)type 42 /查询42的数据类型是什么
-7h /返回的结果为-7h,这里-号代表为Atom(原子)类型,7(可以对照Q语言数据类型表查看)代表为long类型。
q)type 42i /查询int类型的42i的返回结果
-6h /返回的结果为-6h,这里-号代表为Atom(原子)类型,6(可以对照Q语言数据类型表查看)代表为int类型
q)type 42h /查询short类型的42h的返回结果
-5h /返回的结果为-5h,这里-号代表为Atom(原子)类型,5(可以对照Q语言数据类型表查看)代表为short类型
二、浮点数类型
1、浮点数(CharType为f),与其他编程语言类似,浮点数指浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。可以看下在cmd中输入一些浮点数后的返回结果,f代表为float类型,用type查询返回结果为-9h,-号代表为Atom(原子)类型,9(可以对照Q语言数据类型表查看)代表为float类型。有一个特殊显示情况,对于1.0,则返回结果为1f,省去了0,并加了一个f后缀。Q语言中,指数也属于浮点数类型。
示例代码2、浮点数的显示
由于显示的精度原因,我们可能无法显示太长的浮点数,如1.23456789012,在我的电脑上只显示1.234568,要想显示全部,可以利用\P来控制显示精度。
示例代码三、二进制数据类型
二进制数据类型包括boolean(布尔类型)、byte(字节类型)、GUID(全局唯一标识符类型)。布尔类型在输入的时候需要添加b的后缀(0b或者1b),同时布尔类型和其他数据类型可以进行运算,预算结果后的类型为与其进行运算的数据类型,不再是布尔类型。如:3.1415-1b,返回结果为2.1415;3.1415+1b,返回结果为4.1415。
q)0x2a
0x2a
q)"i" $ 0x2a /i表示要转换的十进制数据类型为int类型,$为重载符,可以将后面的数据转换为操作符前面制定的转换类型(后续会专门写一篇类型转换的专题)
42i
q)1+0x29 /十进制数1与十六进制数0x29(十进制为41)相加,返回结果为十进制数42
42
四、文本数据类型
文本数据类型包含char(字符串类型)和symbol(符号类型),这两种类型类似于SQL中的CHAR与VARCHAR两种类型。char类型用双引号引起来表示,如“kdb”,表示一种char类型。也可以利用type来查询对应的数据类型。
q)"kdb" /输入一个char类型,注意要用引号引起来
"kdb"
q)type "kdb" /查询“kdb”的数据类型
10h /返回结果为10h,10(可以对照Q语言数据类型表查看)代表为char类型,与前面查询不同之处返回的结果没有了-号,这是因为不是Atom(原子)类型了,所以没有了-号,下面一个查询“k”的数据类型,因为k为一个字母,则为原子类型,因此返回的结果就包含了-号
q)type "k"
-10h
symbol类型用`符号来表示,并放在开头的位置。如“kdb”,表示一种char类型。也可以利用type来查询对应的数据类型。
q)`q /输入一个symbol类型
`q
q)`kdb`q /输入两个symbol类型
`kdb`q
q)type `q /查询`q的数据类型
-11h
q)type `kdb /查询`kdb的数据类型
-11h /可以看出分别查询`q和`kdb两个数据的数据类型返回结果都为-11h,都有-号返回,说明`kdb·也为Atom(原子类型),11(可以对照Q语言数据类型表查看)代表为symbol类型
q)type `kdb`q
11h /可以看出同时查询`q和`kdb两个数据的数据类型返回结果为11h,没有了-号,说明单个`符号后面的看做一个整体,与char类型有些不用。
五、时间数据类型
Q语言中针对日期时间操作非常简单方便且强大(这也就凸显除了KDB作为时间序列数据库上的本意),时间数据类型包含date(日期类型)、Time(时间类型)、Date-Time(日期-时间类型)、month(月类型)、minute(分钟类型)、second(秒类型)。
日期都是以2000.01.01为时间的起始点,如将2001.01.01转换为int类型,则结果是366天。
q)"i" $ 2000.01.01
0i
q)"i" $ 2001.01.01 /将日期类型转换为int类型,返回结果为366i,则表示2000.01.01~2001.01.01之间有366天。
366i
q)"i" $ 1999.12.31 /将日期类型转换为int类型,返回结果为-1i,则表示2000.01.01~1999.12.31之间有-1天。
-1i
q)"i" $ 2000.02.01 /将日期类型转换为int类型,返回结果为31i,则表示2000.01.01~2000.02.01之间有31天。
31i
time 类型就是一天中的时分秒毫秒。time类型在kdb+表示为32位的int,表示相对于今天0点0分0毫秒的相对值。最小单位为毫秒。因此,int 和time类型也能够轻松转换,时间操作上也轻松方便。当然Date-Time类型就是 date+time合并在一起。Q语言中还提供了分钟秒等类型。
示例代码六、Infinities(无穷)与(Nulls)空数据类型
无穷数据类型其他数据类型的空值表示方式如下:
Null数据类型
网友评论