mysql - 如何在一条语句中使用 'and' 'or' 的 MySQL 正则表达式

标签 mysql sql regex

我正在使用 MySQL 5.x,并尝试使用 SQL 语句根据以下数据集选择行

ID | Type           | Name
1  | Silver         | Customer A
2  | Golden         | Customer B
3  | Silver, Golden | Customer C 
4  | Bronze, Silver | Customer D 

我需要在SQL语句中使用regexp(Legacy system reasons),这里我只需要选择ID=1和ID=4,也就是说我需要“Silver”,“Silver with Bronze”客户类型,但不需要“银+金”

我对正则表达式不太熟悉,一直在尝试使用如下 SQL:

SELECT DISTINCT `customer_type` FROM `customers` WHERE 
`customer_type` regexp 
"(Silver.*)(^[Golden].*)"

我需要像上面一样在一个地方使用正则表达式,但不像下面这样:

SELECT DISTINCT `customer_type` FROM `customers` WHERE 
`customer_type` regexp 
"(Silver.*)" 
AND NOT 
customer_type` regexp 
"(Golden.*)" 

虽然LIKE可以用,但是因为特殊原因不能用。

SELECT DISTINCT `customer_type` FROM `customers` WHERE 
`customer_type` LIKE "%Silver%" 
AND NOT 
customer_type` LIKE "%Golden%"

我无法让第一个 SQL 语句起作用,而且不确定是否可行。

最佳答案

试试这些:

SELECT DISTINCT `id`, `customer_type` 
FROM `customers` 
WHERE `customer_type` regexp "^.*Silver$"

这匹配“anything + Silver”或仅匹配 Silver。

关于mysql - 如何在一条语句中使用 'and' 'or' 的 MySQL 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043123/

相关文章:

mysql - 我怎样才能连接这个结果集?

mysql - 优化执行内部比较的sql查询

python - 从字符串中提取整数 - 包括负整数

Java正则表达式匹配一个反斜杠

MySQL:使用@vars 和子查询

mysql - 追溯更改 MySQL 数据库

sql - 将 WHERE 子句添加到外键

Java 字符串换行 :How do I wrap words in a String at New line character(\n)

php - 防止重复的行在mysql中返回

mysql - Where 子句中的未知列