Php 带有转义字符和类似通配符的子字符串
我有一个字符串Php 带有转义字符和类似通配符的子字符串,php,mysql,sql,sql-like,Php,Mysql,Sql,Sql Like,我有一个字符串Test\u x\u T1,我想替换最后三个字符,即\u T1 如果字符串包含这三个字符,则返回null。 最后一个字符可以是\u T1、\u T2、\u 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 你应该试试这个: case when
Test\u x\u T1
,我想替换最后三个字符,即\u T1
如果字符串包含这三个字符,则返回null。
最后一个字符可以是\u T1、\u T2、\u 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
你应该试试这个:
case when 'Test_x_x_T1' like '%[_]%T_'
你需要匹配字符串的第一部分,在'.'.'之前。我认为你把它复杂化了
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
下划线是单字符搜索的通配符。
如果您的数据包含下划线(
\uu
),并且希望将其用作类似模式的一部分,则将其转义
示例:
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)
试试这个
在“Test\ux\ut1”像“%\\ut\uu”escape”时选择case
然后是substr(trim('Test_x_x_T1'),1,长度(trim('Test_x_x_T1'))-3)
否则,从双字节结束为空
如果要在T
之前匹配\uuu
,则应将其转义,因为\uu
对like运算符具有预定义的含义
如果未转义
,则即使此字符串Test\u x\u xT1
也将返回非空结果。我在您的回答中得到空值。即使我使用Test\u x\u xT1,它也会返回值,改为使用文字下划线:“%T\u1”