我会创建一个“存储函数”(在MSSQL中称为用户定义的函数):
CREATE FUNCTION isNullOrSpaces(s TEXT)
RETURNS BOOLEAN DETERMINISTIC
RETURN (IFNULL(LENGTH(TRIM(s)), 0) = 0);
select
isNullOrSpaces(null) 'null',
isNullOrSpaces('') 'empty string',
isNullOrSpaces(' ') 'spaces',
isNullOrSpaces('
') 'spaces, tab and newline';
请注意,最后一种情况 - 其中值包含选项卡和换行符 - 返回0(FALSE)。这要归功于内置TRIM函数的错误实现(恕我直言),它不会删除所有的空格。
我本来希望使函数isNullOrWhiteSpace,但由于这对于很多情况已经足够好了,并且适当的TRIM函数的纯SQL实现将会很慢,所以我认为这是可行的。如果你需要处理所有的空格,考虑让MySQL调用一个用户定义的函数(本地函数是一个更好的IMO名称) - 例如参见https://www.codeproject.com/articles/15643/mysql-user-defined-functions。
如果参数为NULL,空或空格,您可能还希望创建一个返回空字符串的版本。这个版本主要用于查询的WHERE或HAVING子句,但使一个工作相同但返回空字符串或原始字符串的唯一困难部分是适当地命名该函数。这样的事情:
CREATE FUNCTION trimEx(s TEXT)
RETURNS TEXT DETERMINISTIC
RETURN IF(IFNULL(LENGTH(TRIM(s)), 0) = 0, '', TRIM(s));
select
trimEx(null) 'null',
trimEx('') 'empty string',
trimEx(' ') 'spaces',
trimEx(' not empty ') 'contains text';
那么......其实你可以验证这个在你自己的MySQL ... – RollingBoy 2011-04-02 01:30:51
你认为这是正确的逻辑? – Efox 2011-04-02 01:32:13
(当描述不为NULL时,则'非空',否则'别的'结束)。最后的'其他'永远不会被达到。因为如果描述不为null,它总是碰到'IS NOT NULL'分支。 – RollingBoy 2011-04-02 01:35:48