teradata数据库和eclipse/java错误:为非字符数据指定大写或特定于大小写

dxpyg8gm  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(257)

我使用eclipse和java在运行时使用“?”符号将日期参数传递给下面的sql。但是,当执行以下代码时,会出现以下错误:
[teradata database][terajdbc 15.00.00.35][error 3536][sqlstate hy000]为非字符数据指定了大写或大小写。
此错误仅在我尝试使用?符号。如果我在下面的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
t30tvxxf

t30tvxxf1#

刚刚过去的一年,请尝试以下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 Package 器,我不是100%确定。但是sql本身是好的。

yh2wf1be

yh2wf1be2#

你的逻辑是错误的,你试图从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_date

相关问题