为什么oracle中字段是varchar型,但是查询的时候不写引号也能查询
2017-07-06 14:39
302 查看
隐形转换,一般是有方向的:
字符和数字比时,从字符转数字;
字符和时间比时,从时间转字符
数值和字符有时候会默认相互转化。
数据类型隐式转换,建议不要依赖隐式数据转换:能转换自然没问题,不能转换是报错;关键的是引起其他不可知问题:运行环境变了,原先正常的sql运行不了;性能问题
当你的条件为数字的时候(不管该字段为字符还数字型),直接写数字就可以查询。
但是为了书写规范,建议你写sql的时候,条件不管数字还是字符,都要使用单引号。
oracle中
如果是number类型的话,象你上边那种,会默认的把带引号的转成数字再进行查询,也就是说和你不带引号是一样的同样,如果是字符类型,这一列保存的都是数字(注意,是这列),那么你不带引号的数字也会被oracle默认转成字符类型。
但是有种情况例外,给你做个例子
create table t_test (id varchar2(10));
insert into t_test values ('100');
insert into t_test values ('1000');
select * from t_test where id=100;
select * from t_test where id='100';
这个时候,以上两种查询方式都没问题,如果此时再插入一条数据,如下
insert into t_test values ('1000a');
这个时候你再用上边那两个select,其中第一个就会报错了,其实就是oracle会默认转化的关系!
字符和数字比时,从字符转数字;
字符和时间比时,从时间转字符
数值和字符有时候会默认相互转化。
数据类型隐式转换,建议不要依赖隐式数据转换:能转换自然没问题,不能转换是报错;关键的是引起其他不可知问题:运行环境变了,原先正常的sql运行不了;性能问题
当你的条件为数字的时候(不管该字段为字符还数字型),直接写数字就可以查询。
但是为了书写规范,建议你写sql的时候,条件不管数字还是字符,都要使用单引号。
oracle中
如果是number类型的话,象你上边那种,会默认的把带引号的转成数字再进行查询,也就是说和你不带引号是一样的同样,如果是字符类型,这一列保存的都是数字(注意,是这列),那么你不带引号的数字也会被oracle默认转成字符类型。
但是有种情况例外,给你做个例子
create table t_test (id varchar2(10));
insert into t_test values ('100');
insert into t_test values ('1000');
select * from t_test where id=100;
select * from t_test where id='100';
这个时候,以上两种查询方式都没问题,如果此时再插入一条数据,如下
insert into t_test values ('1000a');
这个时候你再用上边那两个select,其中第一个就会报错了,其实就是oracle会默认转化的关系!
相关文章推荐
- oracle如何通过sql查询VARCHAR2字段含有的单引号?
- oracle中查询字段中包含单引号数据
- 在写入数据库的时候,某字段varchar(20),报“字符长度超长”的错误,但是去数据库中用length()查,发现最大的长度都不超20,为什么会报这个错呢?
- 在oracle 数据库查询的select 查询字段中关联其他表的方法
- 有用的IsNull用于拼接select语句的多个字段(适用于查询结果有空的时候)
- oracle使用了索引但是查询性能没有改善(oracle的索引陷阱) 【转】
- oracle varchar 类型字段查询体会
- 当某个表中存在标志表格中记录不同状态的判断性字段的时候,采用两种不同的数据库组织形式,查询执行速度的实验。
- oracle 定长字段查询问题 ,ibatis 与pl/sql查询的char类型字段查询不同
- Oracle查询某个字段的第一个字为汉字的查询方法
- 子查询 关于子查询应用外表的字段 2008.10.18 oracle
- 查询oracle表的信息(表,字段,约束,索引)
- 说实话真的不想写这篇blog,但是我郁闷的时候不写就会难受,郁闷的时候根本无法控制自己
- 通过存储过程,查询表的相关表字段信息(sqlserver,mysql,oracle)
- oracle 定长字段查询问题 ,ibatis 与pl/sql查询的char类型字段查询不同
- ORACLE 字段的时间段查询。。。
- 当某个表中存在标志表格中记录不同状态的判断性字段的时候,采用两种不同的数据库组织形式,查询执行速度的实验。
- PL/SQL Oracle 用sql query查询,中文字段内容显示异常的处理
- 用select 查询表中所有的字段名 Oracle开发应用
- [VB.NET]oracle中date字段如何查询