我有一个查询项,它按日期列过滤记录,格式为 'YYYYMM
' . 截至目前,我已经在 Detail filters
中对 [DateCol] = '201406'
值进行了硬编码,以获得当前的月份和年份记录 . 但我想动态地改变这个 Value . 对于下个月,它应该按'201407'过滤记录 . 我该如何实现这一目标?我通过拖动 Detail filters
中的 [DateCol]
来尝试这个:
[DateCol] = extract(year, current_date) + extract(month, current_date)
但它返回了一个错误:
UDA-SQL-0460 The operation "equal" is invalid for the following combination of data types: Character and Integer
请指导
3 回答
另一个公式
最简单的解决方案是创建我称之为“月份密钥”的东西,它是一年和一月的整数表示 . 然后,您可以将其转换为char以进行比较 . 它实际上非常简单:
将任意数字乘以100会导致在末尾添加两个零 . 当前年份是2014年所以2014年100等于201400.然后您可以自由添加月份以获得“月份密钥” . 201400 6 = 201406.然后,您可以将此整数转换为char并进行比较 . 最终的过滤器表达式变为:
注意:为日期制作整数“键”的技术也可以延长到几天,并且有许多应用程序,即排序 . 下面的表达式将为您提供一个整数'day key',它保留原始日期的数字顺序和层次结构:
两个问题 . DateCol的数据类型是字符 . 提取函数返回整数 . 其次,你没有正确地使用你的提取物构建你的YYYYMM . 您拥有它的方式,您将年份提取为数字,并将月份添加到它 . 你最终会得到像'201406'= 2020这样的东西,但是不行 . 所以你需要转换两个提取并连接它们:
cast(extract(month,current_date)as varchar(2))
编辑:实际上,它可能会比这更复杂 . 提取不会返回6月6日,只有6.因此,您需要确定该提取是否是一个或两个字符 . 如果它是一个,你需要在投射后向前面加上'0' . 确切的语法将取决于您的数据库,但这样的事情: