我有这个SQL条件,应该检索满足给定的regexp条件的所有行:
country REGEXP ('^(USA|Italy|France)$')
Run Code Online (Sandbox Code Playgroud)
但是,我需要添加一个模式来检索所有空白的国家/地区值.目前我正在使用这个条件
country REGEXP ('^(USA|Italy|France)$') OR country = ""
Run Code Online (Sandbox Code Playgroud)
如何在不包含OR子句的情况下实现相同的效果?
谢谢,欧文
这应该工作:
country REGEXP ('^(USA|Italy|France|)$')
Run Code Online (Sandbox Code Playgroud)
但是从性能的角度来看,您可能希望使用IN语法
country IN ('USA','Italy','France', '')
Run Code Online (Sandbox Code Playgroud)
后者应该更快,因为REGEXP可能非常慢.
没有理由你不能使用$(匹配字符串的结尾)填写你的"空子表达式"问题...
它看起来有点奇怪但country REGEXP ('^(USA|Italy|France|$)$')实际上会起作用
你可以尝试:
country REGEXP ('^(USA|Italy|France|)$')
Run Code Online (Sandbox Code Playgroud)
我刚刚添加了另一个|,France这基本上应该告诉它也匹配^$与相同的country = ''.
更新:由于此方法不起作用,我建议您使用此正则表达式:
country REGEXP ('^(USA|Italy|France)$|^$')
Run Code Online (Sandbox Code Playgroud)
请注意,您不能使用正则表达式:^(USA|Italy|France|.{0})$因为它会抱怨有一个空的子表达式。虽然^(USA|Italy|France)$|^.{0}$会起作用。
以下是此正则表达式的返回值的一些示例:
select '' regexp '^(USA|Italy|France)$|^$'
> 1
select 'abc' regexp '^(USA|Italy|France)$|^$'
> 0
select 'France' regexp '^(USA|Italy|France)$|^$'
> 1
select ' ' regexp '^(USA|Italy|France)$|^$'
> 0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它返回的正是您想要的。
如果您想将空白值视为相同(例如 0 个空格和 5 个空格都算作空白),您应该使用正则表达式:
country REGEXP ('^(USA|Italy|France|\s*)$')
Run Code Online (Sandbox Code Playgroud)
这将导致上一个示例中的最后一行的行为有所不同,即:
select ' ' regexp '^(USA|Italy|France|\s*)$'
> 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7144 次 |
| 最近记录: |