摘要:概述所有的數(shù)據(jù)都是通過最小單位構(gòu)造。語言中大部分數(shù)據(jù)類型與傳統(tǒng)語言類似,但是多出了和相關(guān)的類型,用來加速時間序列運算。適用的運算符僅有數(shù)據(jù)中共有兩種類型數(shù)據(jù),更類似于中的和。其表示值為從千禧年計數(shù)的納秒數(shù),之前為負數(shù),之后為正數(shù)。
概述
所有的數(shù)據(jù)都是通過最小單位atom構(gòu)造。q語言中大部分數(shù)據(jù)類型與傳統(tǒng)語言類似,但是多出了date和time相關(guān)的類型,用來加速時間序列運算。下表給出了q語言和幾個傳統(tǒng)語言數(shù)據(jù)類型的對比:
下表給出了Q語言各個類型的詳細信息:
long: 8字節(jié); 42, 42j
short: 2字節(jié)有符號數(shù);其后必須帶后綴h; eg: -123h
int: 4字節(jié)有符號數(shù);其后必須帶后綴i; eg: 1234567890i
2. 浮點數(shù)據(jù)支持單精度和雙精度浮點數(shù)據(jù)類型。
float: 8字節(jié);后綴f; 傳統(tǒng)語言中的double; eg: 3.1415926, 1f, 1.0, 1.234e07, 1.234e-7
real: 4字節(jié);后綴e; 傳統(tǒng)語言中的float; eg: 12.34e, 1.234e7e
注:不建議使用real這個類型,因為在許多金融問題中,real的精度往往不夠用
浮點數(shù)顯示精度: q console默認顯示7位小數(shù),可以通過命令 P 來最多顯示16位小數(shù),也可以通過 P 0 來顯示完整的17位小數(shù),但是最后一位小數(shù)不可信。
q)f12:1.23456789012 q)f16:1.234567890123456 q)P 12 q)f12 1.23456789012 q)f16 1.23456789012 q)P 16 q)f12 1.23456789012 q)f16 1.234567890123456 q)P 0 q)1%3 0.333333333333333313. Binary數(shù)據(jù)
boolean : 1字節(jié); 后綴b; 沒有true或者false關(guān)鍵字, 1b代表true, 0b代表false
byte : 使用1字節(jié)保存8位數(shù)據(jù),前綴0x緊跟著2個16進制數(shù),大小寫均可。 eg: 0x2A, 0x2a
GUID : globally unique identifier. 在時間和空間上都唯一,可以對null guid值0Ng使用?來生成一個guids的列表。
eg: 1?0Ng, 2?0Ng, -2?0Ng
使用正號和負號生成guid列表的區(qū)別在于:正號使用同一個隨機種子(seed), 而負號使用的種子是隨機的
可以通過解析一個16進制數(shù)字來構(gòu)造guid:"G"$"61f35174-90bc-a48a-d88f-e15e4a377ec8", 同樣,可以使用命令sv來從一個16個byte的列表構(gòu)造guid: 0x0 sv 16?0xff。
GUID適用的運算符僅有:~, =, <, >, null
4. Text數(shù)據(jù)q中共有兩種text類型數(shù)據(jù),更類似于SQL中的CHAR和VARCHAR。
char : 1字節(jié); 對應(yīng)SQL中的CHAR; 用雙引號表示;特殊字符用作為前綴來顯示,盡管在q-console中依舊將顯示了出來,但是實際上它就是一個單字符
q)""" / double-quote """ q)"" / back-slash "" q)" " / newline " " q)" " / return " " q)" " / horizontal tab " " q)"142" "b"
symbol : 前綴` eg: q, `zaphod`
symbol與char一樣,同樣是原子數(shù)據(jù),這意味著symbol不可拆分,symbol中的單個字符不可獲取。 symbol不是string, 并且symbol數(shù)據(jù)`a與char數(shù)據(jù)"a"不相等。
date : 4字節(jié),表示為yyyy.mm.dd; 其表示值為從2000.01.01開始的日期數(shù),在之前的為負值,之后的為正值。
q)2000.01.01=0 1b
表示的累積日數(shù)可以通過強制轉(zhuǎn)換得到:
q)`int$2000.02.01
Time :
如果毫秒級夠用的話,使用time類型,表示為hh:mm:ss.uuu;其表示值為從00:00的毫秒(milliseconds)數(shù)
q)12:34:56.789 12:34:56.789 q)12:00:00.000=12*60*60*1000 1b
其表示值同樣可以通過強制轉(zhuǎn)換來獲取
如果毫秒級不夠用的話,使用timespan類型;其表示為從00:00開始的納秒(nanoseconds)數(shù), 表示為0Dhh:mm:ss.nnnnnnnnn。 其中0D是可選的。
q)12:34:56.123456789 0D12:34:56.123456789 q)12:34:56.123456 / microseconds become nanos 0D12:34:56.123456000
Date-Time :
(已棄用的) 使用T進行分隔:
q)2000.01.01T12:00:00.000 _ q)2000.01.02T12:00:00.000=1.5 1b
可以通過q)date$2000.01.02T12:00:00.000`來提取日期和時間
更推薦使用的類型是timestamp, 是date類型和timespan類型的連接,通過D進行分離。其表示值為從千禧年計數(shù)的納秒數(shù),之前為負數(shù),之后為正數(shù)。
同樣,有如下的操作:
q)2014.11.22D17:43:40.123456789 q)`long$2014.11.22D17:43:40.123456789 q)`date$2014.11.22D17:43:40.123456789 q)`timespan$2014.11.22D17:43:40.123456789
month : 32位帶符號整型, 表示為yyyy.mm和一個尾符號m, 其表示值為從千禧年計數(shù)的月份數(shù)。注意不要忘記帶尾綴m。
q)2015.11m q)2001.01m=12 1b
minute : 32位帶符號整型, 表示為hh:mm, 其表示值為從00:00計數(shù)的分鐘數(shù)。
q)12:30 q)12:00=12*60 1b
second : 32位帶符號整型, 表示為hh:mm:ss, 其表示值為從00:00計數(shù)的秒數(shù)。
q)23:59:59 q)23:59:59=-1+24*60*60 1b
構(gòu)成和點操作符 :
可以通過點操作符提取日期,月份,日等
q)dt:2014.01.01 q)dt.year 2014i q)dt.mm q)dt.dd q)ti:12:34:56.789 q)ti.hh 12i q)ti.mm q)ti.ss
但是更推薦使用強制轉(zhuǎn)換符,因為它對所有有意義的時間提取和轉(zhuǎn)換都是有效的:
q)`dd$dt 1i q)`mm$dt q)`dd$dt q)`month$dt 2014.01m6. 算術(shù)Infinities 和 Nulls
一些特殊含義的表示:
Literal Value 0w Positive float infinity -0w Negative float infinity 0n Null float ; NaN, or not a number 0W Positive long infinity -0W Negative long infinity 0N Null long
注意小寫的w代表float, 大寫的W代表整數(shù)。
在q語言中,數(shù)字的除法結(jié)果總是float. 正數(shù)除以0的結(jié)果為正無窮,負數(shù)除以0的結(jié)果為負無窮。 在數(shù)學(xué)中,0除以0是未定義的,因此,0n代表NaN。整型無窮可以參與比較并返回正確的結(jié)果
q)42<0W 1b q)-0W<42 1b
無窮代表實際的值:
q C Equivalent Numeric 0N MIN_INT -9223372036854775808 -0W MIN_INT+1 -9223372036854775807 0W MAX_INT +9223372036854775807
因此,整型的大小順序為:
0N < -0W < normal integer < 0W q)9223372036854775806+1 0W q)-0W-1 0N q)-0W+1 -9223372036854775806
實際上q語言沒有溢出解釋了如下現(xiàn)象:
q)0W+1 0N q)0W+2 -0W q)0W+3 -92233720368547758067. Nulls
null值一般表示的是缺失數(shù)據(jù)。在q中, null與正常的值占用同樣的空間,如下總結(jié)了null的不同類型值:
type null boolean 0b guid 0Ng (00000000-0000-0000-0000-000000000000) byte 0x00 short 0Nh Int 0N long 0Nj real 0Ne float 0n char " " sym ` timestamp 0Np month 0Nm date 0Nd datetime 0Nz timespan 0Nn minute 0Nu second 0Nv time 0Nt
注意:""不是一個null char, 而是一個char的空列表
使用null指令而不是=來測試一個值是不是null值,因為q語言是動態(tài)類型的,而null指令是類型獨立的。
q)null 42 0b q)null ` 1b q)null " " 1b q)null ""
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/17962.html
摘要:可以通過命令來查看全局變量和對應(yīng)的值,也可以通過操作符來查看轉(zhuǎn)換使用操作符,右邊的運算元是原始值,而左邊的運算元是目標(biāo)類型。從中解析數(shù)據(jù)使用大寫的目標(biāo)類型作為左運算元,作為右運算元。 1. 類型 1. 基礎(chǔ)數(shù)據(jù)類型 showImg(https://segmentfault.com/img/bVbqZmF?w=503&h=599); showImg(https://segmentfaul...
閱讀 1179·2021-11-22 13:54
閱讀 2427·2021-09-22 15:36
閱讀 2734·2019-08-30 15:54
閱讀 801·2019-08-30 15:53
閱讀 3167·2019-08-30 15:53
閱讀 512·2019-08-29 15:21
閱讀 2861·2019-08-28 18:28
閱讀 3003·2019-08-26 13:37