嗨我有这样的查询:
SELECT ?a ?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)
我如何划分第一个nuber和第二个?想要这样的事情:
SELECT ?a/?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Rob*_*obV 12
在SPARQL 1.1中,您可以使用Project表达式执行此操作:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT (xsd:float(?a)/xsd:float(?b) AS ?result)
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)
你可以选择使用xsd:double(?var)强制转换为double,xsd:integer(?var)强制转换为整数并xsd:decimal(?var)转换为小数.
请注意,SPARQL指定了类型提升规则,例如:
如果您确实需要保证数据类型的结果,则可以转换整个除法表达式,例如
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT (xsd:double(xsd:float(?a)/xsd:float(?b)) AS ?result)
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
Run Code Online (Sandbox Code Playgroud)
有两种方法可以实现这一目标:
SELECT ((?a/?b) AS ?result) WHERE {
?c property:name "myThing"@en .
?c property:firstValue ?b .
?c property:secondValue ?a .
}
Run Code Online (Sandbox Code Playgroud)
要么
SELECT ?result WHERE {
BIND((?a/?b) AS ?result) .
?c property:name "myThing"@en .
?c property:firstValue ?b .
?c property:secondValue ?a .
}
Run Code Online (Sandbox Code Playgroud)