首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >甲骨文varchar2字段空白与null

甲骨文varchar2字段空白与null
EN

Stack Overflow用户
提问于 2021-08-14 15:10:33
回答 1查看 127关注 0票数 0

产品版本Oracle 19C

我有一个带有列定义myTable的分区表myCol VARCHAR2(2 BYTE)

最近,使用some加载了一些数据,在加载过程中,显然在没有值的情况下,空间被加载到该列中。我试图将带有空格/空白的行视为null。

我的问题:如何找到空行中包含的内容,以及如何在选择这些行时将这些值视为null?

当我发出下面的查询时,我看到没有返回任何行。

代码语言:javascript
复制
select * from myTable where trim(myCol) is null

我无法弄清楚这些行中包含了什么。请参阅下面我尝试过的调试查询-

代码语言:javascript
复制
select '#'||myCol||'#' from myTable ;

输出

-##

代码语言:javascript
复制
select length(myCol) from myTable ;

输出

-2

代码语言:javascript
复制
select ascii(substr(myCol, 1,1)) as myCol_ascii_Post1 from myTable ;

输出

--0

代码语言:javascript
复制
select ascii(substr(myCol, 2,1)) as myCol_ascii_Post2 from myTable ;

--0

代码语言:javascript
复制
select ascii(substr(myCol, 3,1)) as myCol_ascii_Post3 from myTable ;

输出

-(零)

代码语言:javascript
复制
select DUMP(myCol) from myTable ;

输出

--Typ=1 Len=2: 0,0

代码语言:javascript
复制
select myCol,trim(myCol) as myCol_trim,nvl(trim(myCol),'NULL Value') as myCol_trim_nvl from myTable ;

输出-空白,空白,空白

代码语言:javascript
复制
select count(myCol)
from myTable and trim(myCol) is null;

输出

--0

代码语言:javascript
复制
select count(myCol) from myTable and trim(myCol) = '';

输出

--0

代码语言:javascript
复制
select myCol from myTable; 

输出

-几行空白

代码语言:javascript
复制
select count(myCol) from myTable and ascii(myCol) = 0 order by 1 desc;

输出

--345051行

代码语言:javascript
复制
select count(myCol) from myTable and ascii(myCol) > 0 order by 1 desc;

输出

-0行

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-14 15:39:09

这些字符不是空格或空格,列本身不是空的;它有两个空字符。(见ASCIIUnicode.)这就是转储和ascii调用所显示的-字符代码为零。

因此,与其查找空号或空格,还可以查找这一对字符:

代码语言:javascript
复制
select * from myTable where myCol = chr(0) || chr(0);

或通过修剪该字符而不是默认空格将该值视为null:

代码语言:javascript
复制
select * from myTable where trim(both chr(0) from myCol) is null;

或者用那个字符来修剪/修剪。

db<>fiddle演示;但是显示一个ID而不是实际值,因为空字符会在那里中断输出。(它们也会混淆其他客户端;例如,您无法正确地从复制。)

假设您认为数据加载是不正确的,且该列是可空的,则您可能需要使用以下方法更正已加载的数据:

代码语言:javascript
复制
update myTable set myCol = null where myCol = chr(0) || chr(0);

或者使用相同的筛选器删除行,如果它们根本不应该加载的话。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68784546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档