繁体   English   中英

在Oracle SQL表中查找带双引号的字段

[英]Find a field with double quotes in a Oracle SQL table

我在表中有一个VARCHAR2(8)字段,当我在Oracle SQL Developer中查询它时,得到两个不同的结果。 例如,

SELECT BRAND_NAME FROM BRAND WHERE BRAND_NAME = 'TOYOTA';

返回1行:

|TOYOTA|
SELECT BRAND_NAME FROM BRAND WHERE BRAND_NAME LIKE '%TOYOTA%';

返回两行:

|TOYOTA|
|TOYOTA|

这些值在Oracle SQL Developer中看起来相似,但是当我将其复制并粘贴到记事本中时,得到的输出如下。

TOYOTA
"TOYOTA "

我需要删除带有引号的值的行,但由于表没有任何键字段,因此无法明确标识该行。 我尝试使用转义字符进行搜索,但未成功。

您可以使用以下命令找到字符串:

SELECT BRAND_NAME
FROM   BRAND
WHERE  BRAND_NAME = 'TOYOTA ';

(将"TOYOTA "字符串的内容从记事本复制/粘贴到上面的查询中,而不是尝试重新输入并获取不正确的空格字符)

如果找不到正确的最终字符,请使用正则表达式匹配字符串后的空格字符:

SELECT BRAND_NAME
FROM   BRAND
WHERE  REGEXP_LIKE( BRAND_NAME, 'TOYOTA\s' );

DUMP字符串的内容以查找其他字符的字符代码:

SELECT BRAND_NAME, DUMP( BRAND_NAME )
FROM   BRAND
WHERE  BRAND_NAME LIKE '%TOYOTA%';

将输出:

\n BRAND_NAME |  DUMP(BRAND_NAME)                \n :------------- |  :-------------------------------\n 丰田|  Typ = 1 Len = 6:84,79,89,79,84,65  \n 丰田|  Typ = 1 Len = 7:84,79,89,79,84,65,9\n

db <> 在这里拨弄

您会看到一个额外的字符,其字符代码为9(制表符)

要删除该行,可以使用:

DELETE FROM BRAND
WHERE  BRAND_NAME = 'TOYOTA ' -- Copy/paste the value from notepad, don't retype it

要么

DELETE FROM BRAND
WHERE  BRAND_NAME = 'TOYOTA' || CHR(9) -- Use exact character code

要么

DELETE FROM BRAND
WHERE  REGEXP_LIKE( BRAND_NAME, 'TOYOTA\s' ) -- Match any extra white-space

(确保最后一个不匹配太多行)

db <> 在这里拨弄

密集等级将获得具有重复值和不同长度的记录的column_name和记录长度,可用于delete语句。 例如:

with BRAND as 
(      select 1 as ID, 'TOYOTA'  as BRAND_NAME from dual 
 union select 1 as ID, 'TOYOTA ' as BRAND_NAME from dual 
 union select 2 as ID, 'HONDA'   as BRAND_NAME from dual 
 union select 2 as ID, 'HONDA'   as BRAND_NAME from dual 
 union select 3 as ID,'CORVETTE' as BRAND_NAME from dual 
 union select 3 as ID,'CORVETTE 'as BRAND_NAME from dual)
 select lenth,BRAND_NAME from (
 select Dense_Rank() over(partition by trim(j.BRAND_NAME)
 order by length(j.BRAND_NAME) asc) as ct,
 length(j.BRAND_NAME) as lenth, j.* from BRAND j) 
 where ct!=1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM