您好我有这样的查询:
SELECT ?a ?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
如何划分第一个nuber和第二个?想要这样的事情:
SELECT ?a/?b
WHERE
{
?c property:name "myThing"@en
?c property:firstValue ?b
?c property:secondValue ?a
}
谢谢
答案 0 :(得分:12)
在SPARQL 1.1中,您可以使用类似的项目表达式来执行此操作:
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
}
您可以使用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
}
答案 1 :(得分:5)
有两种方法可以实现这一目标:
SELECT ((?a/?b) AS ?result) WHERE {
?c property:name "myThing"@en .
?c property:firstValue ?b .
?c property:secondValue ?a .
}
或
SELECT ?result WHERE {
BIND((?a/?b) AS ?result) .
?c property:name "myThing"@en .
?c property:firstValue ?b .
?c property:secondValue ?a .
}