Mysql |如何从Mixed Integer String中选择整数值?

时间:2014-12-06 06:40:49

标签: mysql select

我现在一直在寻找几个小时。

有一个像"_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

欢迎提出任何建议

2 个答案:

答案 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' )