mysql - 像isnull()一样检查零值的函数

问题描述 投票:1回答:3

我正在寻找一个函数来检查列是否具有类似于isnull()函数的值0。

这是我到目前为止所得到的:

CONCAT(
    SUBSTRING_INDEX(
        SUBSTRING(textCol, 1, 
            LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y  %H:%i'), textCol)-1),
            '|',
             -1),       
    SUBSTRING(
        textCol,
        LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y  %H:%i'), textCol),
        IFNULL(
            LOCATE( /* this will return 0 if it's the last entry */
                '|', 
                textCol, 
                LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y  %H:%i'), textCol)
            ) - LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y  %H:%i'), textCol),
            LENGTH(textCol))))

textCol中的数据有点像CSV文件,每列中都有另一个CSV文件。每个数据集由|分隔,而其中的每个数据集由&&分隔。内部字段是名称,日期像'%d.%m.%Y %H:%i'和评论。

我想提取对应于我在dateCol中获得的某个DATETIME的数据集。问题是,如果我正在寻找的那个是textCol中的最后一个条目,那么LOCATE(请参阅注释)会返回0.但这会打破我的SUBSTRING,因此只返回条目的前半部分。

我添加了一个ISNULL(),当然这里没有做任何事情。我想做的是有类似于ISNULL()的东西,类似于ISZERO(),就像Perl中的||运算符一样。

可能有一种更好的方式来实现我想要的。请不要犹豫告诉我。

mysql substring zero isnull
3个回答
2
投票
SELECT  CASE expression WHEN 0 THEN 'a substitute for zero' ELSE expression END
FROM    mytable

10
投票

这个更短,避免重复表达:

SELECT COALESCE( NULLIF( expression, 0 ), 'a substitute for zero' ) FROM mytable

1
投票

可能在这里很有用:有一种时髦的方法可以检查表达式是NULL还是0:

IFNULL(NULLIF(expr, 0), alt_expr)

如果expr为NULL或0,则返回alt_expr,否则返回expr。

© www.soinside.com 2019 - 2024. All rights reserved.