TARGET_TABLE:
id | col1
------------
1 'mySample1234'
2 'mySample3456'
MY_VEIW的当前sql:
select substr(col1,-4,4) from TARGET_TABLE;
我的查询:
select * from MY_VEIW where col1 = 'mySample1234';
我的结果:
Empty
预期结果:
id | col1
------------
1 '1234'
换句话说,我想选择TARGET_TABLE'的价值,尽管有MY_VIEW'的过滤值。
如何实现?
答案 0 :(得分:1)
尝试使用Regexp_replace
select regexp_replace(col1 , '[A-Za-z]')
From TARGET_TABLE
答案 1 :(得分:1)
我不确定我理解...你的基表中是否有一个名为col1的列,然后你提取最后四个字符,将它们放在视图中名为col1的列中,然后你要选择从视角来看?
如果是这样 - 我理解' 1234'是mySample1234'的最后四个字符。完整的字符串在基表中,' 1234'在视图中。您如何期待' 1234' =' mySample1234'什么都不假呢? MY_VIEW中的col1只是' 1234'而不是完整的原始字符串。
要从MY_VIEW返回行,必须使用WHERE col1 = '1234'
进行过滤。或者,如果您尝试查看TARGET_TABLE中col1的最后四个字符是否与较长字符串的最后四个字符匹配,则可以使用{{ 1}}(或SUBSTR中的任何其他比较字符串)。
ADDED :如果您尝试将MY_VIEW中的col1与TARGET_TABLE中的相应col1匹配,例如在联接中,您可以这样写:
WHERE col1 = SUBSTR('mySample1234', -4)
答案 2 :(得分:0)
只需使用两个参数:
select substr(col1, -4)
from TARGET_TABLE;
但是,如果这不起作用:
select * from MY_VEIW where col1 = 'mySample1234';
然后原因是col1
位于基础表而不是视图中。我想你想要:
create view my_view as
select col1, substr(col1, -4) as last4
from TARGET_TABLE;
然后你可以使用:
select *
from MY_VEIW
where col1 = 'mySample1234';
或者:
select *
from MY_VEIW
where last4 = '1234';