我有一个记录,其中有一个列中的前导和空格值。
例如:列值为' D0019 '
我想在where子句中传递这个特定的列。
select * from my_table where my_column='D0019';
由于该值具有空格,因此它不会从where子句中检测到。
如果记录在值中有前导和尾随空格,我怎样才能选择记录?
我的数据库是ORACLE
========================================
更新:
我只有在尝试
时才会获得价值select * from my_table where my_column like '%D0019%'
甚至没有使用' %D0019% '
=============================================
更新2:
SELECT my_column ,DUMP(my_column) FROM my_table WHERE my_column like '%D0019';
输出
" D0019" Typ=1 Len=6: 9,68,48,48,49,57
答案 0 :(得分:1)
select *
from my_table
where trim(my_column) = 'D0019';
修改强>
根据dump()
函数的输出,您的值不仅包含(前导)空格,还包含制表符。 trim()
函数只会删除空格字符,但不会删除其他空格。
为了在开头删除任何空格,您需要使用regexp_replace()
select *
from my_table
where regexp_replace(my_column,'^(\s)+','') = 'D0019'
如果您需要摆脱领先的和尾随空格,则需要扩展正则表达式:
select *
from my_table
where regexp_replace(my_column,'^(\s)+|(\s)+$','') = 'D0019'
SQLFiddle示例:http://sqlfiddle.com/#!4/3326a/1
答案 1 :(得分:1)
这不是您必须删除的正常空间。它是Horizontal Tab character
。 (Ascii 9)。
下面的regexp
会删除ASCII范围0-32
中的所有字符,这些字符与空格符号相关联。
select * from my_table
WHERE
REGEXP_REPLACE(my_column,'['||chr(1)||'-'||chr(32)||']' ) = 'D0019';
答案 2 :(得分:1)
似乎很简单(如果我明白的话):
select * from TAB where REGEXP_LIKE (COL,'\s*D0019')
返回“D0019”,“D0019”,“D0019”,“D0019”......等值。
答案 3 :(得分:0)
试试这个;
select * from my_table where my_column like '%D0019';
答案 4 :(得分:0)
如果您只想在选择开头使用空格,也可以使用此选项:
select * from my_table where my_column like '% %D0019';
或
select * from my_table where my_column like ' %D0019';