我现在一直在寻找几个小时。
有一个像"_1_11_19_12_17_21_41_111_100_1"
现在,我希望输出为单1
当我尝试:
"SELECT * FROM jobs_tb WHERE position_id LIKE '%1%' "
这会打印所有内容:
我试过了:
SELECT *
FROM `jobs_tb`
WHERE (
`position_id` LIKE '%_1%'
)
OR (
`position_id` LIKE '%_1_%'
)
与以前完全相同。
当1
与其他数字混合时,您如何隔离1
?
欢迎提出任何建议
答案 0 :(得分:2)
请注意,下划线是单个字符通配符,就像百分号是多字符通配符一样,因此如果要匹配文字下划线,则必须将其转义。此外,字符串可以以“1”开头或结尾,因此您需要考虑到这一点。一个简单的技巧是在要搜索的值周围添加额外的下划线。尝试此查询:
SELECT *
FROM `jobs_tb`
WHERE
CONCAT('_', `position_id`, '_') LIKE '%\_1\_%'
答案 1 :(得分:1)
CREATE FUNCTION PositionIdStringContains(positionIdText TEXT, digit TEXT) RETURNS BIT
BEGIN
DECLARE digitStart TEXT;
SET digitStart = CONCAT( digit, '\_%' );
DECLARE digitEnd TEXT;
SET digitEnd = CONCAT( '%\_', digit );
DECLARE digitMid TEXT;
SET digitMid = CONCAT( '%\_', digit, '\_%' );
RETURN
positionIdText LIKE digit OR
positionIdText LIKE digitStart OR
positionIdText LIKE digitMid OR
positionIdText LIKE digitEnd
END;
然后在SELECT
语句中使用它,如下所示:
SELECT
*
FROM
jobs_tb
WHERE
PositionIdStringContains( position_id, '1' )