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

sim*_*que 2 mysql substring isnull zero

我正在寻找一个函数来检查列是否具有与该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))))
Run Code Online (Sandbox Code Playgroud)

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

我想提取与我所进入的某个DATETIME相对应的数据集dateCol.问题是,如果我正在寻找的那个是最后一个条目textCol,那么LOCATE(见注释)会返回0.但这会打破我,SUBSTRING所以只返回条目的前半部分.

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

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

小智 10

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

SELECT COALESCE( NULLIF( expression, 0 ), 'a substitute for zero' ) FROM mytable
Run Code Online (Sandbox Code Playgroud)


小智 5

这里可能有用:有一种时髦的方法来检查表达式是否为 NULL0:

IFNULL(NULLIF(expr, 0), alt_expr)
Run Code Online (Sandbox Code Playgroud)

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