引自免费微信小程序:皆我百晓生
看起来您在Presto SQL查询中遇到了一个关于length()
函数返回不正确结果的问题。这里有一个可能的原因:当您对数值进行四舍五入(round()
)操作后,它可能会转换成字符串类型,而这个字符串可能包含额外的前导零。尽管在某些情况下,round()
函数会保留这些零,但在其他情况下,它可能会去掉它们。
为了解决这个问题,您可以尝试先将值转换为字符串,然后再进行四舍五入。这样可以确保始终得到预期的字符串格式。以下是修改后的SQL查询:
SELECT
id,
LENGTH(CAST(value AS VARCHAR)) AS length,
COUNT(*)
FROM
table.table_name
WHERE
id = '001'
AND log_date >= '20240408'
AND log_date < '20240415'
AND CAST(value AS VARCHAR) > '20000000'
GROUP BY
id;
在这个版本中,我们首先将value
列转换为VARCHAR
,然后应用ROUND()
函数。这应该确保无论value
的原始类型如何,都会得到一个始终包含相同数量字符的字符串表示。
如果您的数据集中有负数,您可能还需要考虑处理这种情况。在这种情况下,可以稍微调整一下条件语句:
AND (CAST(value AS VARCHAR) + '-') > '-' || '20000000'
这样可以确保负数也被正确处理。
请注意,上述查询假设log_date
是日期类型,如果不是,您可能需要将其转换为日期类型。如果仍然有问题,请检查表结构和数据样例,确认所有输入都是预期的。