【问题标题】:How to remove values that contain 'text + numbers' from column in SQL如何从 SQL 中的列中删除包含“文本 + 数字”的值
【发布时间】:2019-05-30 08:38:24
【问题描述】:

在 MySQL 中,我试图从列中删除特定的文本+数字值。这些值是'US + a number between 1-10',所以类似于'US 1.14''US 1.25' 等。我已经能够删除仅包含'US' 的值,但不能删除包含'US [1-10]' 的值。有谁知道从列中删除'text + numbers' 的SQL 字符串?

该列名为 Geo_Targeting,我使用了以下代码变体:

and GC.Geo_Targeting != '%US [0-9]%'
and GC.Geo_Targeting != 'US %[0-9]%'

理想情况下,该代码将删除任何仅包含“US”或“US + number”的值。

【问题讨论】:

标签: mysql sql


【解决方案1】:

此正则表达式模式将匹配您要查找的值:

US( \d+.?\d*)?

它匹配字符'US',后跟一个空格,后跟一个或多个数字,后跟零或一个'.'字符,后跟零个或多个数字。最后 ?表示它将匹配整个数字组的零个或一个。

您可以将它与 NOT_REGEXP 函数一起使用,以便您只获取与此模式不匹配的值(注意,'\' 字符在 mySQL 中需要加倍)

and GC.Geo_Targeting NOT_REGEXP 'US( \\d+.?\\d*)?' 

如果您需要匹配具有此模式的值,您可以使用“^”字符匹配行首,使用“$”字符匹配行尾。

and GC.Geo_Targeting NOT_REGEXP '^US( \\d+.?\\d*)?$' 

【讨论】:

  • 我试了一下,它说我有语法错误。它说 NOT_REGEXP 在其位置无效
  • 我的计算机上没有 MySQL,因此您需要自己进行一些故障排除。如果你用谷歌搜索如何在 MySQL 中使用正则表达式,你会发现很多结果。
  • 试试不带下划线not regexp
  • 不错!这让它更接近了一点,但我有一些值说'美国,加拿大'或美国 1.3,法国,德国 2" 等,这些值也被删除了。有没有办法保留这些值,只删除具有 '仅限美国”或“美国 + 号码”?
  • 您可以使用 ^ 和 $ 分别匹配一行的开头和结尾。我编辑了我的答案以反映这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多