使用中文字符作为sql的传参,导致查询不出结果

1.需求是从衍生层的数据库日历表中查询出
指定月的第几周的周几

	一开始的sql是这样的
SELECT * FROM 
(SELECT A.*,ROW_NUMBER() OVER(partition by A.year,A.month order by
A.caledrDate ASC) bondAdjustWeek
	FROM (SELECT TO_CHAR(CALENDR_DATE, 'yyyyMMdd') as  caledrDate,
				WORK_DAY_FLAG       AS   workDayFlag,
				to_char(CALENDR_DATE,'YY')  AS year,
				to_char(CALENDR_DATE,'MM')  as month,
				to_char(CALENDR_DATE,'day') as weekDay,
				rank() over (partition by SUBSTR(REC_ID_SRC,0,6),TRUNC(VM.CALEDR_DATE,'DDD')  ORDER BY VM.CALEDR_DATE ASC) RN
				FROM CM_CALND_PAR VM
	WHERE VM.DEL_FLAG = '01'
	AND to_char(CALENDR_DATE,'YYYY-MM-DD'')>= '2021-07-01'
	AND to_char(CALENDR_DATE,'YYYY-MM-DD'')<= '2026-07-01'
	AND SUBSTR(REC_IN_IN_SRC,0,6) = 'NADAYS'
WHERE RN =1 
AND A.month IN ('01','03')
AND A.weekDay = '星期二'
ORDER BY caledrDate asc)X
WHERE X.bondAdjustWeek = '1'

值得注意的是,这里的weekDay我是用的中文字符进行匹配的,

因为当时使用oracle中的tochar函数转换日期,day可以直接看出是中文的周几,Oracle的TO_CHAR函数的format针对时间的转换格式
只注意了to_char(CALENDR_DATE,‘day’)

其实使用**to_char(CALENDR_DATE,‘d’)**更好,可以直接转换成数字,用数字进行匹配,这也是后来的sql写法

后来代码提交上线后,发现根本查询不到任何日期!!!!
1.确认了jekins的发版的分支,以及对应的分支的服务器
2.确认了前端的接口,及对应的接口参数
3.确认对应的接口参数传到本地的后端居然能查询出结果!!!
4.确认对应服务器(有两台服务器都看了)的日志,可惜使用的日志级别仅仅到info,没有异常!

请大佬帮忙改日志级别为debug
使用tail -f100 日志文件名.out |grep 关键接口
发现执行了查询sql,但是查询的结果就是0!!!
服务器上查询的sql日志
最后在大佬们的帮助下,找到了是中文字符的原因,把中文匹配改成数字匹配,问题到解决了!

最后改正过来的sql是这样的
SELECT * FROM 
(SELECT A.*,ROW_NUMBER() OVER(partition by A.year,A.month order by
A.caledrDate ASC) bondAdjustWeek
	FROM (SELECT TO_CHAR(CALENDR_DATE, 'yyyyMMdd') as  caledrDate,
				WORK_DAY_FLAG       AS   workDayFlag,
				to_char(CALENDR_DATE,'YY')  AS year,
				to_char(CALENDR_DATE,'MM')  as month,
				to_char(CALENDR_DATE,'day') as weekDay,
				rank() over (partition by SUBSTR(REC_ID_SRC,0,6),TRUNC(VM.CALEDR_DATE,'DDD')  ORDER BY VM.CALEDR_DATE ASC) RN
				FROM CM_CALND_PAR VM
	WHERE VM.DEL_FLAG = '01'
	AND VM.CALENDR_DATE >= TO_DATE('2021-07-01','YYYY-MM-DD')//这里一开始也不是改后面传的参数TO_DATE,而是改字段,改成TO_DATE是对的。
	AND VM.CALENDR_DATE <= TO_DATE('2026-07-01','YYYY-MM-DD')
	AND WORK_DAY_CALENDR_TYPE_CODE = 'DATE0000025')A//这里一开始并不是这个字段,后来改成了索引字段
WHERE RN =1 
AND A.month IN ('01','03')
AND A.weekDay = 2//这里应该尽量用数字,而不是字符
ORDER BY caledrDate asc)X
WHERE X.bondAdjustWeek = 1//这里也应该尽量使用数字

感谢观看!
点个赞再走呗~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值