【问题标题】:How do I perform a dynamic WHERE clause in QuestDB?如何在 QuestDB 中执行动态 WHERE 子句?
【发布时间】:2021-03-02 16:42:54
【问题描述】:

我希望在 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 中找不到指导

【问题讨论】:

    标签: sql questdb


    【解决方案1】:

    这取决于您要达到的目标,但可能有用的是使用coalesce(),即added in release 5.0.6.1。该函数旨在像 Postgres COALESCE 关键字一样工作,并返回第一个非空参数。可以通过多种方式将其包含在您的语句中,但如果您想为返回 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

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2010-09-23
      相关资源
      最近更新 更多