1

我希望WHERE在 QuestDB 中为类似以下示例 SQL 的内容创建一个动态子句:

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 关键字文档中找不到指导

4

1 回答 1

1

这取决于您要实现的目标,但可能有用的是使用5.0.6.1 版本coalesce()中添加的内容。该函数旨在像 Postgres关键字一样工作,并返回第一个非空参数。有多种方法可以将其包含在您的语句中,但如果您想为返回 null 的列设置默认值,这很有用:COALESCE

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() 的更多示例,可以查看条件函数文档

于 2021-03-03T10:19:27.003 回答