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的过滤值"。
如何做到这一点
尝试使用Regexp_replace
select regexp_replace(col1 , '[A-Za-z]')
From TARGET_TABLE
我不确定我是否理解。。。您的基表中是否有一个名为col1的列,然后提取最后四个字符,将它们放在视图中的一个同样名为coll的列中,然后您想从视图中进行选择?
如果是这样的话,我理解"1234"是"mySample1234"的最后四个字符。完整字符串在基表中,"1234"在视图中。您希望"1234"="mySample1234"如何返回除false以外的任何值?MY_VIEW中的col1只是"1234",而不是完整的原始字符串。
若要从MY_VIEW返回行,必须使用WHERE col1 = '1234'
进行筛选。或者,如果您试图查看TARGET_TABLE中col1的最后四个字符是否与较长字符串的最后四位字符匹配,则可以使用WHERE col1 = SUBSTR('mySample1234', -4)
(或SUBSTR中的任何其他比较字符串)。
添加:如果您试图将MY_VIEW中的col1与TARGET_TABLE中对应的col1匹配,例如在联接中,您可以这样写:
ON (or WHERE ...) MY_VIEW.col1 = SUBSTR(TARGET_TABLE.col1, -4)
只需使用两个参数:
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';