我想知道如何用正则表达式在MYSQL中说不是空字符串。
我的想法:
SELECT * FROM `table` WHERE `column` <> '^$'
就正则表达而言,我完全是新手。而且在MySQL中根本不是专业人士。
答案 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