我有一个字符串Test_x_x_T1
,我想替换最后三个字符,_T1
如果字符串包含这三个字符,否则返回null。
最后的字符可以是_T1, _T2,_T3
但我总是空着
select
case when 'Test_x_x_T1' like '[_]%T_'
then substring(trim('Test_x_x_T1'),1,length(trim('Test_x_x_T1'))-2)
else null end test
答案 0 :(得分:2)
Underscore是单字符搜索的外卡
如果您的数据包含下划线(_
),并希望将其用作类似模式的一部分,那么请将其转义。
示例:
mysql> select * from (
-> select 1 rnum, 'Test_x_x_T1' t
-> union all
-> select 2, 'Test_x_xT1_'
-> union all
-> select 3, 'Test_x_xT1'
-> union all
-> select 4, 'Test_x_x_T1_'
-> ) tst
-> where t like '%\_T_';
+------+-------------+
| rnum | t |
+------+-------------+
| 1 | Test_x_x_T1 |
+------+-------------+
1 row in set (0.00 sec)
答案 1 :(得分:0)
你应该试试这个:
case when 'Test_x_x_T1' like '%[_]%T_'
您需要在'_'之前匹配字符串的第一部分。
答案 2 :(得分:0)
我认为你过于复杂了。
select
case when 'Test_x_x_T1' like '%_T_'
then substring(trim('Test_x_x_T1'),1,length(trim('Test_x_x_T1'))-3)
else null end test
答案 3 :(得分:0)
试试这个
select case when 'Test_x_x_T1' like '%\_T_' escape '\'
then substr(trim('Test_x_x_T1'),1,length(trim('Test_x_x_T1'))-3)
else null end from dual
如果您在_
之前匹配T
,则应该将其转义,因为_
具有类似运算符的预定义含义。
如果_
未转义,即使此字符串Test_x_xT1
将返回非空结果。