我使用"?“传递日期参数。在运行时使用Eclipse和Java对下面的SQL进行标记。但是,当执行以下代码时,会出现以下错误:
Teradata 3536大写或CASESPECIFIC为非CHAR数据指定。
仅当我试图在使用?符号。如果我在下面的SQL中硬编码日期并通过eclipse运行它,它就会运行良好。有谁能提出解决办法吗?
SELECT
TO_DATE (TRIM(EXTRACT (YEAR FROM cast(? as varchar(100)) )) || '-0' ||
TRIM(EXTRACT (MONTH FROM S1.birthday)) ||'-'||
TRIM(EXTRACT (DAY FROM S1.birthday)) ,'YYYY-MM-DD') AS start_Date
FROM STAFF S1
WHERE S1.TEAMID IN (4)
AND (start_date between date-10 and date)
AND birthday IS NOT NULL发布于 2020-07-24 12:29:59
只需经过一年,就可以尝试使用以下SQL:
SELECT (S1.birthday MOD 10000 + ((? (INT))-1900)*10000) (DATE) as start_date FROM STAFF S1 WHERE S1.TEAMID IN (4) AND (start_date between date-10 and date) AND birthday IS NOT NULL ;
缺少Eclipse/Java包装器,我不能百分之百肯定。但是SQL本身很好。
发布于 2020-07-24 18:21:29
您的逻辑是错误的,您尝试从VarChar中提取一年而不是日期。但是,即使是固定的,只要有2月29日的生日,它就会失败。
似乎你想在今年内计算生日,然后在此基础上进行过滤,比如谁在最后一周内过生日。最简单的方法就是计算年龄,比如
cast(months_between (current_date, birthday)/12 as int)并将该年数加到生日中。
add_months(birthday, cast(months_between(current_date, birthday)/12 as int)*12) as birthday_this_year然后你可以过滤
where birthday_this_year between current_date -10 and current_datehttps://stackoverflow.com/questions/63070531
复制相似问题