Javascript Cosmos DB Udf不适用于Where条件

Javascript Cosmos DB Udf不适用于Where条件,javascript,c#,azure-cosmosdb,azure-cosmosdb-sqlapi,Javascript,C#,Azure Cosmosdb,Azure Cosmosdb Sqlapi,通过引用这一点,我创建了一个udf来应用日期过滤器 从c中选择udf.convertTime(c.DatetimeEpoch)作为CommandDate,其中c.columnH='acb' c.CommandDate='2019年9月21日' 但是当我给出udf out put in where子句时,这个查询不起作用。我认为@Unicorno Marley已经清楚地解释了为什么sql不起作用 您可以按如下方式修改sql: SELECT udf.convertTime(c.DatetimeEp

通过引用这一点,我创建了一个udf来应用日期过滤器

从c中选择udf.convertTime(c.DatetimeEpoch)作为CommandDate,其中c.columnH='acb' c.CommandDate='2019年9月21日'


但是当我给出udf out put in where子句时,这个查询不起作用。

我认为@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'
编辑:您现在可以使用子查询来避免重复执行自定义项

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过滤器将是扫描。

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

不会重复,因为您的“where”子句基于表中的数据,而不是查询选择的数据子集。您需要使用子查询、cte、临时表或表变量等来保存结果,然后分别查询这些结果。将UDF添加到where子句后,效果良好。因为我对cosmos db还不太了解,所以我对性能不太确定。如我所写,使用C#逻辑过滤UDF的最佳实践是什么alreasy@UnicornoMarley UDF或通过C#代码过滤的最佳选项是什么?@jubi没有文档表明这会影响性能。下面是一个关于.net sdk性能提示的文档。希望能有帮助。