Cosmos DB Udf无法在Where条件下使用

时间:2019-09-22 02:10:17

标签: javascript c# azure-cosmosdb azure-cosmosdb-sqlapi

为此,我创建了一个udf来应用日期过滤器,

Convert TimeScript to Date in Azure CosmosDB SQL Query

从c中选择udf.convertTime(c.DatetimeEpoch)作为CommandDate,其中c.columnH ='acb' 和c.CommandDate = '09 / 21/2019',

但是当我将udf放在where子句中时,此查询不起作用。

2 个答案:

答案 0 :(得分:0)

我认为@Unicorno Marley清楚地解释了为什么您的sql无法正常工作。

您可以如下修改您的sql:

SELECT udf.convertTime(c.DatetimeEpoch) as CommandDate FROM c where c.columnH='acb' and udf.convertTime(c.DatetimeEpoch) = '09/21/2019'

编辑:您现在可以使用子查询来避免重复执行UDF

SELECT s.CommandDate 
FROM (
    SELECT udf.convertTime(c.DatetimeEpoch) AS CommandDate 
    FROM c 
    where c.columnH = 'acb'
) s
WHERE s.CommandDate = '09/21/2019'

理想情况下,尽管应该执行此映射客户端而不是服务器端UDF,因为WHERE子句中的UDF筛选器将是扫描。

答案 1 :(得分:0)

在CosmosDb中,您不能在where子句中使用别名CommandDate,这与MSSQL不同。您必须在@Tony Ju回答的where子句中再次重复udf。