我使用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
2条答案
按热度按时间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本身是好的。yh2wf1be2#
你的逻辑是错误的,你试图从varchar中提取一年而不是一个日期。但即使修复了,只要出生日期是2月29日,它也会失败。
似乎要计算当前年份内的生日,然后根据此筛选,例如上周内的生日。最简单的方法是计算年龄
把这些年数加到生日上
然后你就可以过滤了