我是靠谱客的博主 悲凉大山,最近开发中收集的这篇文章主要介绍sql报错:文字与格式字符串不匹配+“xxx”标识符无效执行环境对日志表查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 执行环境
  • 对日志表查询


执行环境

oracle+dbeaver


对日志表查询

指定namestartTimeendTime,返回包括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”标识符无效执行环境对日志表查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部