如何在 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。
我想在 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。