【问题标题】:SQL SELECT WHERE NOT LIKESQL SELECT WHERE 不喜欢
【发布时间】:2023-03-27 20:25:01
【问题描述】:

我有一个数组:

$codes = array (97121, 97122, 97123, 97180);

真正的数组要长得多,它包含近 130 个代码,所以我认为它不必是一个循环。

我有一个 mySQL 表,其中有一列 VilleAnn(带有邮政编码的城市)例如:

  • 圣安妮 97180
  • Sanary-sur-Mer 83110

使用 mysqli 我必须从数组 $codes 中选择 VilleAnn 不包含任何邮政编码的位置。

如果 VilleAnn 是一个简单的邮政编码,我会说:

SELECT * FROM table WHERE VilleAnn NOT IN(97121, 97122, 97123, 97180)

但在这种情况下,它必须是使用NOT LIKE "%..."的东西

有什么建议吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

你可以正则表达式:

SELECT * FROM table WHERE VilleAnn NOT REGEXP '97121|97122|97123|97180|....'

【讨论】:

    【解决方案2】:

    In condition 不适用于通配符。你最好的办法是尝试从原始字段中提取邮政编码,在这个例子中

    SELECT * FROM table WHERE right(VilleAnn,5) NOT IN ('97121', '97122', '97123', '97180')
    

    我认为现实生活更复杂,因此可能需要对其进行调整以反映该字段的实际格式。

    【讨论】:

      【解决方案3】:

      类似这样的:

      SELECT * 
      FROM `table` 
      WHERE (
          `VilleAnn` NOT LIKE '%97121%' AND 
          `VilleAnn` NOT LIKE '%97122%' AND 
          `VilleAnn` NOT LIKE '%97123%' AND 
          `VilleAnn` NOT LIKE '%97180%'
      )
      

      【讨论】:

        【解决方案4】:
        SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]';
        

        这会对你有所帮助。

        为了检查你可以使用的四次出现:

        SELECT * FROM table WHERE VilleAnn NOT REGEXP '[0-9]{4}';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-26
          • 2012-09-15
          • 2021-07-18
          • 1970-01-01
          • 2021-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多