我使用Python SQLAlchemy连接到Redshift实例。我试图在两个日期时间之间以分钟计算DATEDIFF,这是有效的。但是当我尝试将结果CAST到FLOAT并在CASE WHEN中使用它时对'< 1',我只得到'那么'的结果?
private void gdEnglish_MouseLeave(object sender, MouseEventArgs e)
{
gdEnglish_clickflag = false;
}
private void gdEnglish_MouseUp(object sender, MouseButtonEventArgs e)
{
if (gdEnglish_clickflag)
{
gdEnglish_clickflag = false;
e.Handled = true;
//////////
// YOUR //
// CODE //
//////////
}
}
private void gdEnglish_MouseDown(object sender, MouseButtonEventArgs e)
{
gdEnglish_clickflag = true;
}
private void gdEnglish_TouchLeave(object sender, TouchEventArgs e)
{
gdEnglish_clickflag = false;
}
private void gdEnglish_TouchUp(object sender, TouchEventArgs e)
{
if (gdEnglish_clickflag)
{
gdEnglish_clickflag = false;
e.Handled = true;
//////////
// YOUR //
// CODE //
//////////
}
}
private void gdEnglish_TouchDown(object sender, TouchEventArgs e)
{
gdEnglish_clickflag = true;
}
答案 0 :(得分:1)
您在ELSE
声明中缺少CASE
条款。如果您希望得到1.0
如果差异小于1而差异为浮点数,则修改您的查询,如下所示:
SELECT distinct
u2.id,
CASE
WHEN CAST(DATEDIFF(minute, u1.usa_start_datetime::timestamp,u1.usa_end_datetime::timestamp) * 1.00 as FLOAT) < 1.00 THEN 1.00
ELSE CAST(DATEDIFF(minute, u1.usa_start_datetime::timestamp,u1.usa_end_datetime::timestamp) * 1.00 as FLOAT)
END as fsess_hr
FROM some_table
另外,我认为你不需要* 1.00
答案 1 :(得分:1)
DATEDIFF()
的返回类型为BIGINT
,您已选择以分钟为单位。因此处理case expression
中的整数然后将值转换为float
SELECT /* DISTINCT */ -- is this really needed?
u2.id
, CAST(
CASE WHEN DATEDIFF(MINUTE, u1.usa_start_datetime ::timestamp, u1.usa_end_datetime ::timestamp) < 1 THEN 1
ELSE DATEDIFF(MINUTE, u1.usa_start_datetime ::timestamp, u1.usa_end_datetime ::timestamp)
END
AS Float) AS fsess_hr
FROM ...
但是你仍然会回来几分钟,所以我不理解为什么它被称为fsess_hr,你在某个时候将其除以60.0吗?
答案 2 :(得分:0)
我发现:: float可以与datediff配合使用。看上去比cast() as float
SELECT distinct u2.id,
CASE
WHEN DATEDIFF(minute,u1.usa_start_datetime::timestamp,u1.usa_end_datetime::timestamp)::float < 1.00
THEN 1.00 END as fsess_hr,