首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >/Java错误:大写或CASESPECIFIC为非CHAR数据指定

/Java错误:大写或CASESPECIFIC为非CHAR数据指定
EN

Stack Overflow用户
提问于 2020-07-24 09:13:21
回答 2查看 85关注 0票数 0

我使用"?“传递日期参数。在运行时使用Eclipse和Java对下面的SQL进行标记。但是,当执行以下代码时,会出现以下错误:

Teradata 3536大写或CASESPECIFIC为非CHAR数据指定。

仅当我试图在使用?符号。如果我在下面的SQL中硬编码日期并通过eclipse运行它,它就会运行良好。有谁能提出解决办法吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 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本身很好。

票数 0
EN

Stack Overflow用户

发布于 2020-07-24 18:21:29

您的逻辑是错误的,您尝试从VarChar中提取一年而不是日期。但是,即使是固定的,只要有2月29日的生日,它就会失败。

似乎你想在今年内计算生日,然后在此基础上进行过滤,比如谁在最后一周内过生日。最简单的方法就是计算年龄,比如

代码语言:javascript
复制
cast(months_between (current_date, birthday)/12 as int)

并将该年数加到生日中。

代码语言:javascript
复制
add_months(birthday, cast(months_between(current_date, birthday)/12 as int)*12) as birthday_this_year

然后你可以过滤

代码语言:javascript
复制
where birthday_this_year between current_date -10 and current_date
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63070531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档