关于oracle between and 的问题

某表有多个字段,其中a和b字段都是varchar2类型的,存的都是数值,为了查询符合条件的结果集,分别写了几条语句。
1、select * from tbname where a='100'(或100) and b between 1 and 100;
2、select * from tbname where b between 1 and 100;
3、select * from tbname where b between '1' and '100';
其中1正常执行,且返回结果符合要求,2会报错,提示无效的数字,3有返回,但是是按照ASCII码进行罗列的,不符合要求。
请问1为什么能正常执行?

0

8个回答

因为你的b列中有非数字字符串,例如a11,而你的1因为选择的是a=100的数据,a=100的数据中b列都是数字字符串,所以可以执行成功。

3
daxia_DN
blue小脚丫 回复sinat_35715502:b列中是否有null?
接近 3 年之前 回复
ChococlateTan
ChocolateTan 回复sinat_35715502: 你用not in看看数据有什么不同就明白,估计做查询的时候底层做了类型转换,但数据有不是数字字符串的所有有问题
接近 3 年之前 回复
sinat_35715502
sinat_35715502 回复blue小脚丫: b列中的字符串也都是数值,没有其他的类型
接近 3 年之前 回复

b这列什么类型啊
你的b有问题感觉是

0
sinat_35715502
sinat_35715502 回复qq_35135312: a列和b列都是varchar2类型的
接近 3 年之前 回复

--创建一个表
create table test_hsj(
id int primary key,
num varchar2(12),
regDate date
)

select * from test_hsj;

--插入测试数据
insert into test_hsj values(1,'1', to_date('2015-05-01','y......
答案就在这里:oracle between and 边界问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

0

数据问题,第二条SQL语句是没问题的,你第一条查询出来的那条数据就证明有这种数据!
有2种可能:
1.b里面有其他字符串,不全是数字
2.b里面全是数字,但是数字后面可能有空格

0

应该是b列中的值有点问题

0

b列中有值不能隐式转换为数字,而且信息太少,不好定位那条数据有问题,可以把select * from tbname where b between 1 and 100;这个语句变成 1到10,11到20,复制10下,慢慢缩小范围,看看哪条数据有问题。

0

列b有非数字的字符,你可以用个语句验证一下select 1 from tbname where to_number(b) > 0;一定会报错

0

另外字符比较当然是用的asc码,但是你可以转换成数字再比,比如where to_number(b) between 1 and 100,但前提是b全部可以转换成数字,所以最终数据规范是前提,如果数据不规范你这些业务逻辑就有问题了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Mysql,Oracle中关于between的边界,范围以及查询日期时注意事项
关于Between操作符 操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 语法 SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 注意事项 对于上诉SQL不同的数据库对 BETWEEN…AND 操作符的处理方式是有差异的。主要有以...
【转载】关于 oracle between and的用法!
oracle date等类型是带时间部分的,所以你这个2011-07-05 只是相当于2011-07-05  00:00:00这个时刻,按你的写法大于这个时刻的是不会删除的。如果你确实要删除2011-07-05的建议你用以下写法:delete from jf_syslog where  inputtime >=date\'2011-07-01\' and nputtime<date\'2011-0
关于Between and查询日期边界问题和查不到当天日期的问题
转载请标明出处:https://blog.csdn.net/weixin_41965979/article/details/81166812 本文出自付付讶的博客 最近实现一个按日期范围查询列表,例如输入的是日期 2018-07-21到2018-07-23,想得到21号到23号的数据, 执行 select * from table where date between '2018-07-2...
BETWEEN AND的边界值问题
1.操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 2.BETWEEN ... AND 相当于 >= AND
between and 处理时间区间不包括右边界问题
问题就是 - 你没有传时分秒 若传入两个日期为年月日,mysql默认为0时0分0秒起止 如 BETWEEN ‘2018-10-01’ AND ‘2018-11-01’; 即‘2018-10-01 00:00:00’到‘2017-11-01 00:00:00‘   解决方法: 推迟一天,用  BETWEEN ‘2018-10-01’ DATE_ADD(AND ‘2018-11-01’,I...
调试经验——使用Oracle BETWEEN函数限定查询结果的时间范围(Limit data range in Oracle)
需求:要创建一个半年生成一次的报表给领导看。现有的做法是在数据库中提取出数据后在Excel中通过filter筛选出最近半年的数据,没错,纯手动操作(弊端有二:容易出错,效率低)。如何自动化呢?使用VBA有点小题大做,通过SQL脚本实现即可。该BETWEEN条件语句出场了。代码:AND UTABLE.UDATEFIELD BETWEEN TO_DATE('2017-12-01','YYYY-MM-D...
sql中的between和in的用法
IN 是包含这几个数据,BETWEEN 包含前一个不包含后一个,相当于0&amp;lt;=x&amp;lt;1。如果为否,在IN 或者 BETWEEN 前加 NOT。
在oracle数据库中怎么对一个date类型的字段使用between...and...子句
SELECT createtime FROM um_user WHERE createtime BETWEEN to_date( '2018-01-01', 'yyyy-mm-dd' ) AND to_date( '2018-12-31', 'yyyy-mm-dd' ) ORDER BY createtime DESC SELECT createtime FROM u...
Oracle中查询某个时间段的记录时,sql的写法 between and
select * from Oracle.alarmLog where alarmtime between to_date('2007-03-03 18:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2007-09-04 18:00:00','yyyy-mm-dd hh24:mi:ss') select * from crpay.CREDI
oracle数据库 hql语句用between and 比较一段时间(带有时分秒)
1、String hql = "select e from entity e where e.date between to_date('2011-10-1','yyyy-mm-dd hh24:mi:ss') and to_date('2011-11-24','yyyy-mm-dd hh24:mi:ss')";
oracle查询效率(二)--in and exist
 in 与 exist 的语法比较:           select × from 数据表 t where t.x in (...)       括号内可以是符合t.x字段类型的值集合,如(1,2,3),但如果t.x是number类型的时候,似乎这样的写法会出问题;也可以是通过另外的select语句查询出来的值集合,如(select y from 数据表2 where ...)。  
rownum between连用为什么得不到数据呢?
rownum在使用select查询的时候,自动生成的一串顺序号。在每返回一条数据结果的时候,rownum就自动加一。简单的说,是对结果集加的一个伪列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。用>,>=,=,between...and这几个条件结果是没有数据的,因为你从缓冲区或数据文件中查询得到的第一条记录的rownum为1,则会被删除的,接着读取下一条数据,可是它的rownum又变
sql 中 between 的边界问题 ---- between 边界:闭区间,not between 边界:开区间
BETWEEN 用以查询确定范围的值,这些值可以是数字,文本或日期 。 BETWEEN 运算符是闭区间的:包括开始 和 结束值 。  如下: 我有一个表只有4行数据: 用 between 查,是包含前后边界值的: not between 则是不包含前后边界的   补记: 日期边界问题,如:'2010-04-21 16:42:39','2010-04-23 16:42...
时间函数-between
关于SQL中Between语句查询日期的问题 在CSDN找到了相同的问题描述和解决方法: 问题: 我的表某个字段是Datetime型 以" YYYY-MM-DD 00:00:00" 存放  如  A 2009-01-22 21:22:22  B 2009-01-22 19:21:11  C 2009-01-22 23:10:22  现在用 select * from TAB
Oracle面试题1
1、每一个用户有姓名、别名、性别、联系方式,但是联系方式有多种: 公司电话、手机、固定电话, 问:你怎样设计表结构  **使用powerdesigner工具  **引用设计范式1,2,3  **设计两张表:tuser(#id,#name,#alias,#sex,#concatid)         tconcat(#id,#tele,#phone,#telecompany)
查询两个日期(时间)以内的数据,between and 或 and 连>= <=,to_date()
between and 方法 [code=&quot;sql&quot;]select * from kk.kkhmd where larq between(to_date('2008-9-3','yyyy-mm-dd')) and (to_date('2008-9-5','yyyy-mm-dd'))[/code] 用and连接 &gt;= =to_date('2008-9-3','yyyy-mm-dd') a...
遇到有关mysql的各种问题
先把工作中遇到的问题记录下,后面再详细展开。 1、mysql启动报错:Starting MySQL… ERROR! The server quit without updating PID file http://blog.51cto.com/732233048/1636409 http://blog.csdn.net/qiubt__123/article/details/52205325 ...
Oracle日期函数months_between的用法
select months_between(sysdate,to_date('2015-08-14','yyyy/mm/dd')) from dualmonths_between(参数1,参数2),返回的是两日期差的月份数, (1)若两参数一致,返回为0select months_between(sysdate,to_date('2015-08-14','yyyy/mm/dd')) from du
使用between and查找时间范围时的日期边界问题
最近在一个项目的后台数据库查找中,需要根据表中的时间字段查找某一范围内的数据(7天、15天、30天),这时我想用between and(其实使用DateDiff函数就可以完成,详情请看另一片文章:SQL查询今天、昨天、7天内、30天),但我对于between and查找时间范围时的边界问题不是特别清楚,所以在网上查找了相关资料,在这儿做个简单的记录。 首先要了解between操作符的用法,操作符...
时间类型数据使用between ...and ..语句条件查询时应注意的问题
平时使用 between ..and..语句时,对于数值
oracle月数年数专用函数months_between
求时间差月数 floor(months_between(sysdate, date)) 求时间差年数 floor(months_between(sysdate, date) / 12) years
oracle字符串连接及months_between函数
字符串连接: 在MYSQL中字符串连接使用的是concat内置函数。可以写为:select * from myDB where name =concat('a','bc') 在SQL Server中字符串连接用+号。可以写为:select * from myDB where name ='a'+'bc' 在Oracle中字符串连接用的是||号 select * from myDB
oracle 每日一题-分析函数的RANGE/ROW窗口
作者:        Kim Berg Hansen   运行环境:SQLPLUS, SERVEROUTPUT已打开 我有一张表,登记着我在哪些日期有手机漫游(漫游的意思是我在国外)。我还有一个视图,生成了特定期间的所有日期: create table plch_roaming (    roam_date   date primary key ) / inser
oracle rownum使用与分页
oracle学习第一天 rownum使用与分页  rownum使用与分页     rownum说明:         rownum是个伪列,是随着结果集生成的,返回的第一行分配的是1,第二行是2等等,生成的结果是依次递加的,没有1就不会有2。             注意,不返回的就不算,第一条返回的结果的rownum为1。         rownum一旦生成,就不会变化了
为什么Oracle的伪列rownum不支持>,>=,=,between...and,而都用<
为什么Oracle的伪列rownum不支持>,>=,=,between...and,而都用2008-03-13 16:24对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只
oracle 判断条件不在某一时间范围内(not between)
判断条件在某一段时间范围内用 BETWEEN SELECT * FROM P_VOTE t WHERE to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') BETWEEN to_char(t.BEGIN_TIME, 'yyyy-mm-dd hh24:mi:ss') AND to_char(t.END_TIME, 'yyyy-mm-dd hh24:mi:ss') ...
ORACLE单行函数与多行函数之四:日期函数示例
实验环境: BYS@bys1>select * from nls_session_parameters where parameter='NLS_DATE_FORMAT'; PARAMETER            VALUE -------------------- ------------------------------ NLS_DATE_FORMAT      yyyy/mm/d
日期函数months_between的用法
month_between
Oracle之开窗函数 - 详解 AND Rows
解析: 三个位置:最前边一行,最后边一行,当前行 位置永远是自上而下的 drop table emp purge; CREATE TABLE emp (   emp_id    NUMBER(6),   ename  VARCHAR2(45),   dept_id   NUMBER(4),   hire_date DATE,   sal    NUMBER(8,
Linux环境搭建:CentOS7安装Oracle
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
SQL语句中between和>= <= 的性能差别
系统中的数据由于时间长了积累到了一定程度,发现查询越来越慢,于是开始考虑优化,第一步检查SQL的过程中,发现使用了 ALARM_TIME &gt;=? and ALARM_TIME =
Oracle 中关于 Between and 日期边界问题
之所以会写日期边界范围的问题,是因为我在查询日期的时候,刚开始数据都能正常获取,但是突然有些数据获取不到。刚开始以为是 Between and 的边界问题。但是经过一番折腾发现,发现是 Oracle 在对日期格式的字段进行查询时,会对字符串进行了隐式转换。 以下就是错误的查询语句 -- create_time 的时间为 2019/3/26 23:00:00 SELECT * FROM T_CL...
LitePal 2.0 使用笔记
之前写过一个LitePal 2.0的dome,用法太片面,之后遇到了许多的问题。 做一个笔记,以防止在遇到的时候依旧不会。 LitePal 默认主键是id。 如果从服务器回去数据要存储,服务器返回字段最好不要包含id字段不然会被覆盖,取值不正确,可以改名字。 LiePal 查询 : List&amp;lt;Food&amp;gt; foods = LitePal.where(&quot;food_id = ?&quot;, orde...
Oracle ROWNUM用法和分页查询总结
分页查询格式1 在查询的最外层控制分页的最小值和最大值。查询语句如下: SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) WHERE RN BETWEEN 21 AND 40 分页查询格式2 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >=
Centos7安装Oracle11g出现问题的解决方法总结
在Centos7中安装Oracle11g时,出现无法看到提示的警示框时,则采用以下方法安装Oracle 解决方案:./runInstaller -jreLoc /usr/local/jdk1.8 其中/usr/local/jdk1.8是jdk的安装路径,个人根据实际情况进行修改。 在安装的过程遇到的问题以及解决方法: 问题:ins_emagent.mk”错误提示: 【Error in in
SQL高级语句-BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
BETWEEN 操作符 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 SQL BETWEEN 语法 SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 原始的表 (在实例中使用:) Persons
Oracle数据库的in,between...and操作符的理解
in可以被理解为多个or语句的相连,betww
【数据库】不同数据库对于between and的处理 对于取查到的第一个的处理
mysql oracle sql server
MySql中IN、OR、BETWEEN性能比较
由于是转载,直接贴结论。 性能:between&amp;amp;gt;in&amp;amp;gt;or。 结论来源于 https://yq.aliyun.com/ziliao/69452
select语句中between和in的区别
如有转载请注明出处:http://blog.csdn.net/donkey2004112103/archive/2009/05/03/4146114.aspxabap中select语句里有几个需要注意的地方。如果要让选择的结果在某一个范围之内的话可以用between和in这两个关键字。大多数情况下二者的反映都是一样的,但是如果为空的情况就不一样了。如下: WHERE vbeln BETWE
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算