oracle 更新一个列 原来的字段为 ‘你好么’ 更新成 ‘你好’ 为啥 会变成‘你好 ’即多了两个空格。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 更新一个列 原来的字段为 ‘你好么’ 更新成 ‘你好’ 为啥 会变成‘你好 ’即多了两个空格。相关的知识,希望对你有一定的参考价值。
请问这是什么原因?如果不是在程序中使用trim()怎么去掉空格?
看看表的定义,那一列的类型是CHAR(6)还是VARCHAR2()。看你的情形,应该是CHAR(6)了。如果是CHAR(6),任何值都会被转换成6字符的长度,不足就补空格,只有改类型为VARCHAR2(6),然后UPDATE 列=TRIM(列)追问
我的数据类型为varchar2(50),为什么存储为‘你好么’的时候后面没有空格?谢谢!
追答CHAR这个类型,其值强制转换为固定长度,不足的部分用空格补足。
VARCHAR2这个变长字符串,它只限定了值的最大长度,具体字符串根据你插入的值决定,除非你在字符串最后人为插入空格,不然是不会自动添加的。
这算是系统的一种规定吧。
你好!可能是我问题没问好,这个varchar2的这些基本信息我知道,我想知道的是。例如varchar2(50)第一次插入的数据是‘你好么’,那么此列的长度会固定为vahrchar2(6)么?
我觉得再进行更长的字符(只要是不超过50)的插入也应该是可以的吧?
但是为什么update 成较短的字符串就会添加空格,是不是因为 oracle 已经为本字段赋予了6个字节的长度,再update的时候就只能插入大于6的字符串,少于6 就要用空格补齐 ?谢谢!
VARCHAR2的字符串长度随着你插入的值变化,不应该发生你说的补空格这种情况。给你贴一个我的测试例子看看:
SQL> create table test_char(col1 varchar2(50));
Table created.
SQL> insert into test_char(col1) values('你好么');
1 row created.
SQL> commit;
Commit complete.
SQL> update test_char set col1='你好';
1 row updated.
SQL> commit;
Commit complete.
SQL> select col1||'有没有空格?' from test_char;
COL1||'有没有空格?'
--------------------------------------------------------------
你好有没有空格?
SQL>
从最后一行可以看到,我在更新字段值为'你好'以后,并没有空格,最后一个SELECT在'你好'后面直接拼接'有没有空格',说明数据库中的值是没有空格的。你描述的现象很奇怪,我无法解释。
如果不是用trim(字段)
关于oracle 多表关联更新的问题
有三张表:A表/B表/C表,其中A表与B表是数据库中原有的,C表是新导入进oracle中的,
A表中有a000(唯一标识号),a002(姓名),a008(身份证号)
B表中有a000(唯一标识号),--现在想要更新的数据列为a079??
C表中有卡号(导入新表后取列名为kh),姓名(导入新表后取列名为name),身份证号(导入新表后取列名为zjhm)我现在是想把C表中的‘卡号’(kh)这一列更新到B表中的a079列,如何导入?
---------------提示----------
现在问题是B表中没有身份证号码和姓名,只能通过A表与B表关联后作为一张大的表,然后再关联C表中的姓名和证件号码来更新到B表中的a079列。
---------考虑的问题----
A表中可能有重复的身份证号码或者姓名
(1)如果A表中有重复的身份证号码,可以用去重的方法来踢掉,
(2)A表中重复的姓名怎么办? 请写出一个语句来查一下A表中重复的姓名有多少。
--------------------------------------------------本人是新手,请针对问题予以回答-----------------------------------
C表根据身份证号直接关联到A表,查询出所有的a000,然后直接根据这个去update B表中的数据 参考技术A 身份证唯一就行,姓名重复是无法避免的
select count(*) from (select name from a group by name having count(name)>=2)本回答被提问者采纳
以上是关于oracle 更新一个列 原来的字段为 ‘你好么’ 更新成 ‘你好’ 为啥 会变成‘你好 ’即多了两个空格。的主要内容,如果未能解决你的问题,请参考以下文章
oracle 如何将字段类型varchar 改为blob 更改提示数据类型的变更无效