怎么说MYSQL中的空字符串与正则表达式

时间:2014-02-12 13:24:08

标签: mysql regex

我想知道如何用正则表达式在MYSQL中说不是空字符串

我的想法:

SELECT * FROM `table` WHERE `column` <> '^$' 

就正则表达而言,我完全是新手。而且在MySQL中根本不是专业人士。

4 个答案:

答案 0 :(得分:9)

使用LENGTH()

SELECT * FROM table
WHERE LENGTH(column) > 0

这(正确)返回一个或多个空格的行,并且不返回空值。


请注意

WHERE column <> ''

行为不同。 <>忽略尾随空格,因此包含(仅)空格的列将被视为与''相同,因此这些行将从选择中排除。如果 是您想要的,那么您可以这样做:

SELECT * FROM table
WHERE column <> ''

OR

SELECT * FROM table
WHERE LENGTH(TRIM(column)) > 0

无论哪种方式,包含NULL的列都会将WHERE表达式计算为NULL,这将从选择中排除该列。 (没有必要也做“AND列IS NOT NULL”)

答案 1 :(得分:2)

解决方案取决于您是否希望将仅包含空格的列视为“空”。

要将空白视为空,并且从选择中排除,请执行以下操作:

SELECT * FROM `table` WHERE `column` <>  '' AND `column` IS NOT NULL

注意:此处TRIM(column) 不需要,因为<> 会忽略尾随空白。但是,如果您认为TRIM(column)使意图更清晰,那么将它包括在内是没有害处的:

 SELECT * FROM `table` WHERE TRIM(`column`) <>  '' AND `column` IS NOT NULL

这与第一个版本的结果完全相同。


要考虑的空白为空,并在选择中包含,请使用Bohemian's accepted answer


如果您真的想使用REGEX,请检查this

SELECT * FROM `table` WHERE `column` REGEX '^$' AND `column` IS NOT NULL

但我不建议使用REGEX检查字符串是否为空。


<强>更新
在上述所有答案中,"AND column IS NOT NULL" 可以省略。包含NULL的列将WHERE表达式计算为NULL,这将从选择中排除列。

因此可以用更简单的方法获得相同的结果:

SELECT * FROM `table` WHERE `column` <>  ''

答案 2 :(得分:1)

这不是与正则表达式的比较:

SELECT * FROM `table` WHERE `column` <> '^$' 

这是:

SELECT * FROM `table` WHERE `column` REGEX '^$' 

SELECT * FROM `table` WHERE `column` RLIKE '^$' 

学习正则表达式的第一件事就是何时使用它们,何时不使用它们。这不是一个案例。你应该这样做:

SELECT * FROM `table` WHERE `column` <> '' 

顺便说一句,当值为NULL时,所有这些比较都会自动失败。如果您想允许NULL值,则必须明确地执行此操作。

答案 3 :(得分:0)

fieldname REGEXP '^$|[[:blank:]]|[[:space:]]' OR fieldname IS NULL