आप CASE
. का उपयोग कर सकते हैं वर्ष के लिए निकालने और परीक्षण करने के लिए अभिव्यक्ति और केवल तभी बदलें जब वर्ष आपकी इच्छित सीमा में आता है:
with test_data (col1) as (
values ('sdfg 2000'), ('foo 1983'), ('bar 2010'), ('bla 1940')
)
select col1,
case
when nullif(regexp_replace(col1, '[^0-9]+',''),'')::int between 1990 and 2050
then regexp_replace(col1, '\d{4}', '', 'g')
else col1
end as replaced
from test_data;
इसमें परिणाम:
col1 | replaced
----------+---------
sdfg 2000 | sdfg
foo 1983 | foo 1983
bar 2010 | bar
bla 1940 | bla 1940
nullif(..)
उन मानों के लिए आवश्यक है जिनमें कोई संख्या नहीं है। यदि आपके पास ऐसे मूल्य नहीं हैं, तो आप इसे छोड़ सकते हैं।