关于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为什么能正常执行?

8个回答

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

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

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

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,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

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

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle between and
請問oracle中的between date1 and date2它兩邊的是大於還是大於等於。rn是>=date1 and
关于 between 的问题!!!!!!!!!!!!!!!!!!!!!!
请问rnrn语句1: date between '2005-1-1' and '2005-1-30'rnrn语句2: date >= '2005-1-1' and date <= '2005-1-30' rnrnrn请问上面的两 个条件语句的 效果是不是 一样的????????????rnrn
oracle between and 的查询条件显示的问题
select * from tpoolhourinfo a where a.workdate between to_date('2008-8-20','yyyy-mm-dd') rnand to_date('2008-8-25','yyyy-mm-dd')rnrn有没有办法取到查询条件betwwen and 里的所有时间数据rn就像rn2008-8-20rn2008-8-21rn2008-8-22rn2008-8-23rn2008-8-24rn2008-8-25rn因为我现在存的数据不是每天都有的 我要下哪天没有 我就要查询条件的时间了 到底是哪天没有的
关于between and 的问题
数据库中有一字段,size,类型为varchar(20),rn不能用select * from A where Size between 10 and 20,rn那么我现在想 取出10到20的数据,请问怎么做啊,不改变size的varchar型
关于sqlserver的between and 的问题
如题 一个查询语句 select*from table where '1234' between one and two;rn数据库里有两条数据,数据1,one=123,two=124;rn数据2 one=1234,two=1235;rn这时候不应该是只能查出数据2吗,1234在1234和1235之间,为什么数据1也会查出来,怎么样写才是只查出数据2,求解
关于between and 语句的问题
有一语句rnselect field from #t where field between 1 and 10000rnrn其中field为varchar类型,值为5000rn用上面的SQL语句查询结果查不到值rn而用rnselect field from #t where field between 1 and 9999rn确可以到得查询结果rnrn请问这什么原因,如何解决
关于 BETWEEN .... AND .....语句问题
只是想问问这个数据范围可不可以是字符形式的.以前总是一些数值形的比较,现在用到了,字符型的,请那位试过没有呀?
关于between and查询问题
select * from KPIDMPRD.F_SALEABETD_ADD where dateid between date '2012-2-23'and date '2012-7-23'rnrn查询出的数据是从2012/5/29日开始的,而用select * from KPIDMPRD.F_SALEABETD_ADD where dateid =date '2012-2-23'则可以查询出具体的2月23号的记录,求指教,怎么才能查询出从2月23号到7月23号的所有记录呢?上面的语句错在什么地方?rn
between 与 not between的问题
请高手看看我下面两个语句:rn语句1rnselect distinct a.str_deductbill_nornfrom [sellrebate].dbo.t_deduct_account_detail arn rnwhere a.str_bill_no between '200812260000' and '200903259999'rnrn and str_deductbill_no='200901070089'rnorder by str_deductbill_norn////rn语句2rnselect distinct a.str_deductbill_nornfrom [sellrebate].dbo.t_deduct_account_detail arn rnwhere a.str_bill_no [color=#FF0000]not[/color] between '200812260000' and '200903259999'rnrn and str_deductbill_no='200901070089'rnorder by str_deductbill_norn以上两个语句的区别是在between前一个有not一个没notrn在本人看来一个两个语句查出的结果是相对的,可是恰恰相反。请问各位这是什么原因?rnrn
关于 between and~~~~~~~~`
第一句rnadoquery1.sql.add('update daa074 set skqk=''kasjhd'' where daa074.elsyds between daa091.jdds2 and daa091.jdds2');rn第二句rnadoquery1.sql.add('update daa074 set skqk=''kasjhd'' where daa074.elsyds between 1 and 1000');rnrn如果我象第一句 那样写就出错 rn如果象第二句 那样写 就可以更新成功 为什么?应该怎么写??????rnrndaa074,daa091 是dbf表rnrn
关于between。。and
今天在公司查1-6月的销售额 使用 between'20110101' and '20110701' 和 date<='20110630' and date>='20110101' rn 得出的结果不一样...between。。and 算出来的多了0701 这一天的 按道理AND()是不包括的...所以百思不得其解rnrn 我用的软件是PB 这个不影响的吧?
Oracle中关于日期between and的使用方法,求助
Oracle中,如何获得下表表中数据rnYM DD NUMrn201107 26 11 rn201107 27 14rn201107 28 19rn201107 29 21rn201107 30 61rn201107 31 71rnrn201108 1 24rn201108 2 42rn201108 3 204rn201108 4 12rn201108 5 124rnrnrn如何获得2011年7月26号到2011年8月5号的NUM数据rnrn注:YM DD 都是NUM类型
Oracle 中关于 Between and 日期边界问题
之所以会写日期边界范围的问题,是因为我在查询日期的时候,刚开始数据都能正常获取,但是突然有些数据获取不到。刚开始以为是 Between and 的边界问题。但是经过一番折腾发现,发现是 Oracle 在对日期格式的字段进行查询时,会对字符串进行了隐式转换。 以下就是错误的查询语句 -- create_time 的时间为 2019/3/26 23:00:00 SELECT * FROM T_CL...
一个关于between and的小小的问题
大家都知道between...and...是包含边界值的,但是我做了一实验,rn[code=SQL]rnselect * from emprnwhere ename between 'A' and 'J';rn[/code]rn在结果中有首字母为A的ename,但没有J的。这是为什么?
还是关于between语句的问题
select * from homeifo where replace(mianji,'㎡','') between '0' and '150' rnrn我数据库中mianji的值最大就是90rnrn写成上述0~~150却读不出来 rnrn难道between语句的范围不能大于数据库中值得范围吗?rnrn这个问题怎么解决?
关于BETWEEN查出重复记录的问题
在MYSQL上做了这么一件事rnrnCREATE TABLE TTrn(rn AA VARCHAR(5),rn BB DATETIMErn);rnrnINSERT INTO TT VALUES ('AAAAA', NOW());rnINSERT INTO TT VALUES ('BBBBB', NOW());rnINSERT INTO TT VALUES ('CCCCC', NOW());rnINSERT INTO TT VALUES ('DDDDD', NOW());rnrn结果是rn AA BBrn"AAAAA","2009-09-04 10:49:01"rn"BBBBB","2009-09-04 10:49:06"rn"CCCCC","2009-09-04 10:49:10"rn"DDDDD","2009-09-04 10:49:13"rnrnrn查询语句rnrnSELECT AA,BB FROM TT rnWHERE BB BETWEEN STR_TO_DATE('20090904104906','%Y%m%d%H%i%S') AND STR_TO_DATE('20090904110015','%Y%m%d%H%i%S')rnrn得到结果rnrn AA BBrn"BBBBB","2009-09-04 10:49:06"rn"CCCCC","2009-09-04 10:49:10"rn"DDDDD","2009-09-04 10:49:13"rn"BBBBB","2009-09-04 10:49:06"rn"CCCCC","2009-09-04 10:49:10"rn"DDDDD","2009-09-04 10:49:13"rnrnrn谁能帮我解释解释。。。为什么结果集会多出重复的记录?
关于count和between共存的问题
现在遇到这么一个难题。我要从一张数据表中读出及格的人数,良好的人数,优秀的人数,不及格的人数。想用一条SQL解决问题。rn可是这样报错,有哪位高人能帮忙呢?rnrnselect count(成绩 between '0' and '60')as 不及格,count(成绩 between '60' and '80')as 及格,count(成绩 between '80' and '90')as 良好,rncount(成绩 between '90' and '100')as 优秀 from 表a
关于SQL查询between问题,
Dim SQLString As StringrnSQLString = "SELECT * FROM zzdj WHERE 制作日期 between '" + DTP1.Value + "' and '" + DTP2.Value + "'"rnrn Dim table As DataTable = EditData.Search(connStr, SQLString)rn If table.Rows.Count <= 0 Thenrn MsgBox("输入有误,请重新输入!", MsgBoxStyle.Information, "输入信息")rn Returnrn End IfrnrnEditData.Search如下:rn Dim conn As OleDbConnection = New OleDbConnection(ConnStr)rnrn Dim myCommand As OleDbCommand = New OleDbCommand(strSQL, conn)rnrn conn.Open()rnrn Dim adapter As New OleDbDataAdapterrn adapter.TableMappings.Add("Table", "TEMP")rn adapter.SelectCommand = myCommandrnrn Dim ObjectdsDataSet As New DataSet()rn adapter.Fill(ObjectdsDataSet)rnrn conn.Close()rnrn Return ObjectdsDataSet.Tables("TEMP")rnrn测试出现问题如下:rnadapter.Fill(ObjectdsDataSet) rn(标准表达式中数据类型不匹配。)rn请教各位大侠,问题是在哪里,非常感谢了rnrn
关于between的问题,在线等
我现在有一个单号查询得sqlrn单号格式:pur030400012(nvarchar)rn我做查询时要在pur010200001到pur030400015的数据rn我原来是这样想的,rnselect (right(phone,5))rn from customersrn where convert(right(code,9)) between convert(right(pur010200001,9)) and convert(right(pur030400015,9))rn可是,运行不了rn
***请教关于BETWEEN的查询速度问题***
我有一SQL语句rnrnselect sum(jine) as famountrnfrom T2_YEB A LEFT JOIN T2_LACCOUNT B rnon A.fport = B.fport and A.fcode = B.fcode AND B.fyear = '2006'rnwhere A.fport in ('000001', '000002', '000003', '000004', '000005',rn '000006', '000007', '000008', '000009') andrn A.fdate between to_date('2006-01-01', 'yyyy-MM-dd') andrn to_date('2006-09-30', 'yyyy-MM-dd') and A.fcurrencycode = 'USD' andrn A.facctcode = '4301'rnrn其中T2_YEB主键和索引为:FPORT,FDATE,FCODErnT2_LACCOUNT的主键和索引为:FYEAR,FPORT,FCODErn如果我的查询日期段是1月1日到1月30日,速度为0.5秒rn可如果变成1月1日到9月30日,速度就变成了22秒多rnrn我知道因为查询量大了,所以速度慢了,可也一定有什么方法解决这个问题的吧?
关于SQL BETWEEN 包含的问题?
例:SELECT * FROM Persons WHERE LastDate BETWEEN '2008-1-1' AND '2008-1-31'rnrn在这里面会列出2008年1月1日和2008年1月31日之间的所有数据,包含了2008-1-1的数据但是不包括2008-1-31,那么如何包括2008-1-31的数据呢?
关于between统计季度问题
我安装季度进行统计,时间 between '2009-01-01' and '2009-03-31'rn但是为什么3月31日的数据统计不进去呢?
between and 的问题
我现在在10g中有一个表 这个表有一个字段 类型是varchar2的rn现在表里面有一些数据rn我现在有个需求 rn要求出这个字段里面 满足 ‘V2200’到‘V2499’这个区间的所有的记录rn我现在这样写了一个sql语句rn[code=SQL]select * from table_name where dx between 'V2200' and 'V2499';[/code]rnrn但是这个sql语句求出来的结果居然包含 ‘V240’这样的数据rn我现在想要得出来的数据是 类似于‘V2200’,‘V2201’,'V2202','V2300'.....这样的结果rnrn哪位高手知道怎么才能写出这样的sql语句啊???
between问题
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickrnrnrnDim sqlstr As Stringrnsqlstr = "select * from KC where Data between '2001-1-1' and '2000-5-1'"rnrnDim myda As OleDb.OleDbDataAdapterrnmyda = New OleDb.OleDbDataAdapter(sqlstr, OleDbConnection1)rnDataSet11.Clear()rnmyda.Fill(DataSet11)rnDataGrid1.DataSource = DataSet11.KCrnrnEnd Subrn错误提示:未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。rnrn那有大侠会啊,帮个忙,小弟不胜感激!rnrn
between and问题
[code=sql]rndatetime between case when @timeStart='' and @timeEnd=''rnthen datetime else @timeStartand and @timeEndend endrn关键字 'and' 附近有语法错误。rn[/code]rn为什么提示我and附近有语法错误rn我想写的是:当timeStart和timeEnd这2个参数不为空时,就查找datetime符合这2个条件中的数据
between 问题
[code=SQL]rndeclare @t table(brq varchar(10),erq varchar(10),hh int,ye dec(6,2)) rninsert into @t select '2006-01-02' ,'2012-10-1',1111 ,2.01 rnunion all select '2006-01-05' ,'2012-10-31',1111 ,3.51 rnunion all select '2006-01-10' ,'2012-10-1',1111 ,2.55 rnunion all select '2006-01-02' ,'2012-10-30',2222 ,3.00 rnunion all select '2006-01-04' ,'2012-10-1',2222 ,2.00 rnunion all select '2006-01-05' ,'2012-10-1',3333 ,6.54 rnunion all select '2006-01-06' ,'2012-10-1',3333 ,5.23 rnunion all select '2006-01-07' ,'2012-10-1',3333 ,8.55 rnrnselect * from @t where convert(nvarchar(10),getdate(),120) between brq and erqrn[/code]rnrn结果我明白,取出包含当前日期区间的记录,rn请问 convert(nvarchar(10),getdate(),120) between brq and erq 里的convert(nvarchar(10),getdate(),120)起什么作用rn这个between是怎么运行的?
between ……and的问题
我打算做个网上书店,我想在小类中按价格划分并且有连接,如:100元以下 100元-200元。rn我怎么从数据库中调出来?
between and的问题
我有一个字段 varchar(15) 数据为rn192.168.0.1rn192.168.0.2rn192.168.0.3rn192.168.0.4rn192.168.0.5rn192.168.0.10rn192.168.0.11rn192.168.0.12rn192.168.0.15rn在使用between and 查询时发现rnwhere col between '192.168.0.1' and '192.168.0.3'rnwhere col between '192.168.0.12' and '192.168.0.15'rn可以查出来数据rnwhere col between '192.168.0.1' and '192.168.0.11'rn就不行了,要怎么写?rnrnrnrnrnrnrnrn
between的问题
我现在想查出两个日期之间的数据rnSELECT *rnFROM t_InfornWHERE (info_Title LIKE '%%') AND (info_Class_id = 8) AND (info_AddTime BETWEEN rn '2004/07/26' AND '2004/07/28')rnORDER BY info_Count DESCrn但是在数据库中的时间字段时有时间的,这样的话就查不出来了。rn架通配符也不行,请问怎么办?rn
Between and 的问题
rn select * from t where 日期 between '2008-11-01' and '2008-11-21'rnrn 查询出来的数据不包含11月21号的,请问是为什么?rnrn 日期列的数据如: 2008-11-21009:31:02:000
提问!关于between与<,>的区别!
今天遇到一个问题,找一些数据,我用between,但是有同事告诉我,用<,>比between的效率高。好像between边界也有问题。
关于SQL语句 between and
SQL.Format("SELECT * FROM zhichu WHERE date between'%s'and'%s '",m_date,mdate2);rnm_ado.m_pRecordset = m_ado.m_pConnection->Execute ((_bstr_t)SQL,NULL,adCmdText);rnrnm_date,m_date2是MFC的两个编辑框rnrn为什么不好使啊求解rnrnrnrnrnrnPS:rnrnSQL.Format("SELECT * FROM shouru WHERE date like '%s'", m_date2);rn这个已经通过了 查的很准 rn
关于查询的between
我在asp中有个查询在where time between a and brn但是我发现查询出来的时间不包括b,怎么办??
关于between and 范围设定???
那位大哥是到如何设置 between and 的范围。rn我想要>=1 <4rn
between和>
当记录超过上万条记录,是应用于between快呢,还是应用>=和<=快呢rnrn如:字段 between 100 and 400rn 字段 >=100 and 字段<=400rnrn 哪个更快些?
关于db2 between and 的疑问
关于db2 between and 的疑问rn假设table: A(column VARCHAR(18))其中存有身份证号码。身份证号除末尾含字母,其他为数字。rn用select * from A where substr(column,9,2) between '00' and '99' ,不能排除如‘55013419681M032016’这样的记录。rn请问这是怎么一回事?
关于时间BETWEEN的疑惑
我想写一个SQL语句,是这样的rnrn[code=SQL]select count(*) from table1 where id=10086 and tiem between .........[/code]rnrn进行到BETWEEN这里我就下不去了,疑问在于,请看下表,时间的格式是这样的rnrn2010-07-26 06:45:00.000rn2010-07-26 07:00:00.000rn2010-07-26 07:15:00.000rn2010-07-26 07:30:00.000rn2010-07-26 07:45:00.000rn2010-07-26 08:00:00.000rnrnrn其实我是想写时间BEWTEEN 在 2010年-07-26 的7点到9点之间,但是咋写都说有错误,我郁闷啊~求高手解之
关于dtpicker的between查询
我用了rnselect * from table1 where field1 between dtpicker1.value and dtpicker2.valuern结果报错rn大家知道正确的语句应该怎么写吗?
between
select * from spml where spdm between '0002%' and '0004%'rn为什么只查找出0002xxx到0003xxx的?rn同理rnselect * from spml where spdm between '0002%' and '0005%'rn为什么只查找出0002xxx到0005xxx的?
between and
select * from a rnwhere a1 between (select b1 from b where to_char(a_date, 'yyyymm') like '%200901%')rnand (select b2 from b where to_char(a_date, 'yyyymm') like '%200901%' )这样写可以吗?谢谢!
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法