概述
- 执行环境
- 对日志表查询
执行环境
oracle+dbeaver
对日志表查询
指定name、startTime、endTime,返回包括id等所有字段信息,指定所有date类型信息以yyyy-MM-dd格式返回。
表中name是varchar类型,两个时间是date类型。
一开始写的:
select id,NAME,
TO_CHAR(STARTTIME , 'yyyy-MM-dd') AS STARTIME,
TO_CHAR(ENDTIME , 'yyyy-MM-dd') AS ENDTIME,
from LOG
where NAME='xxx' AND STARTTIME='2022-10-01' AND ENDTIME='2022-10-01'
order by id ASC
报错说:文字与格式字符串不匹配,可是明明把STARTTIME转换了格式,怎么会不匹配,然后多次尝试把我的变量用各种转换格式的方法处理都不对。看了很多转换格式的例子,发现最开始的变量格式应该是和TO_CHAR之后的字段格式就是匹配的,最后尝试把取的别名换了个名字后发现错误就变了。
新的报错说:新取的别名标识符无效,把where子句里的STARTTIME换成TO_CHAR(STARTTIME , ‘yyyy-MM-dd’) 就没有报错了。
我以为是取别名失败了,但是对比有无“as xxx”后发现,列的名字在加了as后会改,所以其实取成功了。
开始看对列取别名用在where子句的问题,看到这篇文章,说的很清楚了,就是where子句会先执行,取名的子句后执行,所以执行where子句的时候系统不知道你还给字段取了个小名,自然也就不知道你这个没见过的小名是什么了。
解决方法是内联视图,我理解的就是用括号给取名的子句插队,让它比where子句执行的还早就行了。根据大佬的例子,我改写了我的sql语句:
select *
FROM
(SELECT id,NAME,
TO_CHAR(STARTTIME , 'yyyy-MM-dd') AS STARTIME,
TO_CHAR(ENDTIME , 'yyyy-MM-dd') AS ENDTIME,
from LOG )
where NAME='xxx' AND STARTTIME='2022-10-01' AND ENDTIME='2022-10-01'
order by id ASC
最后就岁月静好了【玫瑰花】。
最后
以上就是悲凉大山为你收集整理的sql报错:文字与格式字符串不匹配+“xxx”标识符无效执行环境对日志表查询的全部内容,希望文章能够帮你解决sql报错:文字与格式字符串不匹配+“xxx”标识符无效执行环境对日志表查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复