Cosmos DB Udf 不适用于 Where 条件
Cosmos DB Udf not working with Where condition
通过参考这个,我创建了一个 udf 来应用日期过滤器,
Convert TimeScript to Date in Azure CosmosDB SQL Query.
SELECT udf.convertTime(c.DatetimeEpoch) as CommandDate FROM c where c.columnH='acb'
和 c.CommandDate = '09/21/2019',
但是当我在 where 子句中给出 udf out 时,这个查询不起作用。
我认为@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 过滤器将被扫描。
在 CosmosDb 中,您不能在 where 子句中使用别名 CommandDate,这与在 MSSQL 中不同。正如@Tony Ju 回答的那样,您必须在 where 子句中再次重复 udf。
通过参考这个,我创建了一个 udf 来应用日期过滤器,
Convert TimeScript to Date in Azure CosmosDB SQL Query.
SELECT udf.convertTime(c.DatetimeEpoch) as CommandDate FROM c where c.columnH='acb' 和 c.CommandDate = '09/21/2019',
但是当我在 where 子句中给出 udf out 时,这个查询不起作用。
我认为@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 过滤器将被扫描。
在 CosmosDb 中,您不能在 where 子句中使用别名 CommandDate,这与在 MSSQL 中不同。正如@Tony Ju 回答的那样,您必须在 where 子句中再次重复 udf。