假设我有一个范围:
a: (0.005*til 13) - 0.03
-0.03 -0.025 -0.02 -0.015 -0.01 -0.005 0 0.005 0.01 0.015 0.02 0.025 0.03
Run Code Online (Sandbox Code Playgroud)
当我这样做时,-0.01 in a我得到了0b,这是我没有预料到的。当我这样做时,-0.015 in a我得到了1b。
更奇怪的是,当我直接索引时:
-0.01 = a 4
Run Code Online (Sandbox Code Playgroud)
我明白了1b。
这里发生了什么事?
假设我有一个 KDB 日期时间。如何隔离它的“第二”部分:
2022.02.01D14:30:12.391424612
Run Code Online (Sandbox Code Playgroud)
那会是吗12?
我已经尝试过了t.second,但这会返回一个时间而不是整数。
我正在尝试加载 csv 数据来测试我编写的一些 kdb+ q 函数。将数据加载到表并将一行翻转到字典中后,引用的数据中出现意外的逗号。
我创建了一个非常简单的 csv 文件,名为 testdata.txt:
a,b,c,d,e,f,g
1,2,3,4,5,6,7
10,11,12,13,14,15,16
Run Code Online (Sandbox Code Playgroud)
我像这样加载 csv:
td: ("JJJJJJJ";1#",") 0: `:data/testdata.txt
Run Code Online (Sandbox Code Playgroud)
结果:
a b c d e f g
--------------------
1 2 3 4 5 6 7
10 11 12 13 14 15 16
Run Code Online (Sandbox Code Playgroud)
然后我提取一行并将其翻转到字典中:
tdic: flip 1#td
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好:
a| 1
b| 2
c| 3
d| 4
e| 5
f| 6
g| 7
Run Code Online (Sandbox Code Playgroud)
然后我尝试引用字典中的一项,并且在该值之前有一个逗号。
q)tdic `a
,1
Run Code Online (Sandbox Code Playgroud)
由于逗号,我的数据无法用于任何测试目的,至少如果我将其翻转到字典中。我很确定我做错了什么,因为我没有在任何地方看到这个问题的记录。
我们用类型C(即字符数组)定义了我们的KDB表.我们插入的第一个值有一个String类型.第二个值的类型为int(即i).现在,当我们尝试使用条件查询KDB时,where like="value"它不起作用.因为我们在一列中有混合类型,我们如何where根据此列查询数据并过滤它(在子句中使用)?
在此链接中,有一个关于如何包含动态参数的示例.d,在KDB选择查询中:
h: hopen`:myhost01:8012 // open connection
d: 2016.02.15 // define date var
symList: `GBPUSD`EURUSD
h raze "select from MarketDepth where date=", string d, ", sym in `GBPUSD`EURUSD" // run query with parameter d
Run Code Online (Sandbox Code Playgroud)
这d是类型date,并且易于字符串连接以生成动态查询.
如果我想symList通过转换为字符串添加为动态参数:
raze "select from MarketDepth where date=", string d, ", sym in ", string symList
Run Code Online (Sandbox Code Playgroud)
连接的字符串变为:select from MarketDepth where date=2016.02.15, sym in GBPUSDEURUSD,换句话说,字符串连接会丢失反引号,因此查询不会运行.我怎么解决这个问题?
pS:我知道功能查询但是在失败2小时后,我已经放弃了.
我有一个包含符号的表*.
q)sl:([] s:(`$"g*g";`$"b*l";`$"bx"))
q)sl
s
---
g*g
b*l
bx
Run Code Online (Sandbox Code Playgroud)
如何在搜索时转义*(通配符号),我想搜索包含*普通字符的所有符号?
例如,这个返回包含'b'的两行,我只想让它返回'b*l'
q)select from sl where s like "b*"
s
---
b*l
bx
Run Code Online (Sandbox Code Playgroud) 该meta表relevantOverrides如下:
security j
startDate d
endDate d
dataItem s
val f
Run Code Online (Sandbox Code Playgroud)
我有一个更新查询:
relevantOverrides:update val:163390j from relevantOverrides where security = 18767
Run Code Online (Sandbox Code Playgroud)
val列有一个float类型,但我需要将更新后的值作为整数插入.
我想在KDB中创建一个函数,它可以根据用户输入的字符串格式将datetime对象转换为字符串.有没有办法在KDB中这样做?
在Python中,它将是这样的:
format = "%m-%d-%Y_%H%M%S"
def f(format, dt):
return dt.strftime(format)
Run Code Online (Sandbox Code Playgroud) 假设我有一个给定的日期d:
d:2019.02.20
Run Code Online (Sandbox Code Playgroud)
如何写一个函数f,从而f是True,如果d是这个月的最后一天,False否则?
例:
f[d] / Should return 0b
f[2019.02.28] / Should return 1b
f[2019.01.31] / Should return 1b
Run Code Online (Sandbox Code Playgroud) 我们有一个表t:
t:([] sym:`GOOG`IBM`APPL; px:10 20 30; size:1000 2000 3000)
Run Code Online (Sandbox Code Playgroud)
现在,我们要根据函数中提供的条件选择在输出中分配一列。
{[m]select sym, px, size, eb:?[`ab=m;`cd;`ef] from t where size>1000}[`ab] / This works fine providing proper value to eb in output(if/else)
Run Code Online (Sandbox Code Playgroud)
但是我的要求是基于(if / else if)将eb的值设置如下,尝试了?,$,但是没有用
{[m]select sym, px, size, eb:?[`ab=m;`cd;`yz=m;`ef] from t where size>1000}[`ab] / It fails with type error
Run Code Online (Sandbox Code Playgroud)
要求(须藤代码):
if (m==ab) { return cd};
else if (m==yz) {return ef};
Run Code Online (Sandbox Code Playgroud)