【问题标题】:Select specific numeric value only in string仅在字符串中选择特定的数值
【发布时间】:2015-12-03 08:31:41
【问题描述】:

当我从数据库中提取字符串时,我需要隔离字符串中的数值,字符串通常看起来像“blah.blah_123”。

我需要选择所有包含 fx 的字段。 1 结尾,但不是 10、100、123。

这是我的查询的一部分:

SELECT `table1`.`shipping_code`
FROM `table2`
  INNER JOIN `table1` ON `table1`.`id` = `table2`.`id`
WHERE `table1`.`shipping_code` LIKE '%3%'

【问题讨论】:

  • 向我们展示您的尝试。 (你很可能需要一些正则表达式)
  • 整数值总是在最后吗?
  • @jarlh 是的,但前面的字符串不同。
  • @jarlh 它在某种程度上有效,但它也会选择更高的数字,说我有这样的东西:“blah.blah_1”和“blah.blah_11”。

标签: php mysql sql mysqli sql-like


【解决方案1】:

由于_LIKE 通配符,因此需要对其进行转义:

SELECT `table1`.`shipping_code`
FROM `table2`
  INNER JOIN `table1` ON `table1`.`id` = `table2`.`id`
WHERE `table1`.`shipping_code` LIKE '%#_1' escape '#'

也许 MySQL 有一个默认的转义字符?我的回答是(或多或少)符合 ANSI SQL,但它也应该适用于 MySQL。

【讨论】:

    【解决方案2】:

    这个?

    SELECT * FROM table WHERE column REGEXP '1$'

    但如果您的模式很容易隔离,则可能正则表达式存在性能问题,请按照 jarlh 的建议使用 LIKE 运算符。也许如果这对您有用,最好从要匹配的模式中排除“_”...

    SELECT * FROM table WHERE column LIKE %1

    【讨论】:

      【解决方案3】:

      试试这个

      SELECT REGEXP_SUBSTR ('abcde_1001001', '[[:digit:]]+1$|[^10|100|123]$') 从双;

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 2022-01-08
        • 1970-01-01
        • 2021-09-13
        • 2016-07-08
        • 2021-06-16
        • 1970-01-01
        • 2016-06-25
        • 2021-12-01
        相关资源
        最近更新 更多