如何在 QuestDB 中执行动态 WHERE 子句?

How do I perform a dynamic WHERE clause in QuestDB?

我想在 QuestDB 中为 the following example SQL:

创建一个动态的 WHERE 子句
DECLARE @ColumnA VARCHAR(20)
DECLARE @ColumnB VARCHAR(25)
DECLARE @SQL NVARCHAR(1000)

SET @SQL = 'SELECT
    ColumnA,
    ColumnB
FROM TestData
WHERE 1=1'

IF(@ColumnA IS NULL)
BEGIN
    SET @SQL = @SQL + '
               AND ColumnA = ''' + @ColumnA + ''''
END

IF(@ColumnB IS NULL)
BEGIN
    SET @SQL = @SQL + ' 
                AND ColumnB = ''' + @ColumnB + ''''
END

EXEC(@SQL)

最好的方法是什么?我在 WHERE keyword documentation

中找不到指导

这取决于您要实现的目标,但使用 coalesce() 可能会有用,即 added in release 5.0.6.1。该函数旨在像 Postgres COALESCE 关键字和 returns 第一个非空参数一样工作。有多种方法可以将其包含在您的语句中,但如果您想为列设置默认值,它会很有用 returns null:

SELECT
    coalesce(ColumnA, 0.12) as column_a_not_null
    coalesce(ColumnB, 2.34) as column_b_not_null
FROM TestData

如果您想省略 两列 都为空的行,您可以使用:

SELECT
    ColumnA,
    ColumnB
FROM TestData
WHERE ColumnA != null OR ColumnB != null

并且如果您想省略 null 在任何列 中的行,您可以使用

SELECT
    ColumnA,
    ColumnB
FROM TestData
WHERE ColumnA != null AND ColumnB != null

如果您想查看有关 coalesce() 的更多示例,可以查看 conditional functions documentation