总体目标:在查询生成器中创建一个查询,该查询对日期时间列进行过滤,仅提取当前时间最后 7 天的数据。 我正在尝试在查询生成器中使用自定义表达式来执行此操作。 理想情况下,它只是自定义表达式过滤器中的以下内容,但不会导致提取任何数据。
t1.TimeCol >= format((Today() - InDays(7)), "m/d/y h:m:s")
Query Builder 似乎为其 WHERE 语句“ymd h:m:s”(即“2022-07-07 11:13:55”)采用特定的日期时间格式,JMP 没有内置格式为了。 因此,我创建了一个自定义日期格式,如下所示这个例子. 在数据表中,它按预期将日期时间列转换为自定义格式。 尽管出现“未知格式:myNamespace:QueryDate”错误,但我正在努力调用 jsl 代码中的格式。 有什么见解吗? 谢谢!
print(format(Today(), "m/d/y"));
print(format(Today(), "myNamespace:QueryDate"));
自定义格式:
Add Custom Functions(
New Custom Function(
"myNamespace",
"QueryDate",
Function( {inputVar},
{Default Local},
Char( Year( inputVar ) ) || "-" || Char( Month( inputVar ) ) || "-" ||
Char( Day( inputVar ) ) || " " ||
Char(Hour(inputVar)) || ":" || Char(Minute(inputVar)) || ":" || Char(Second(inputVar))
),
<<DESCRIPTION></DESCRIPTION>
如果比较数据库中的日期时间列,则需要一个日期时间值进行比较,但格式返回一个字符串。 因此,据我所知,这将行不通。 您需要将数据库中的日期时间字符串转换为日期时间值。
但是对于您的任务,您可以通过简单地从数据库中获取当前日期并减去一些天数来避免这个问题,并将其作为查询生成器中的自定义表达式实现,
但语法将取决于数据库。
对于 ANSI,它可能看起来像这样:
t1.datetime > addday(now(), -7)
对于 Oracle,它可能看起来像
t1.datetime > sysdate - 7