我正在寻找一个函数来检查列是否具有与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中的||
运算符。
可能有一种更好的方式来实现我想要的东西。请不要犹豫告诉我。
答案 0 :(得分:9)
这个更短,避免重复表达:
SELECT COALESCE( NULLIF( expression, 0 ), 'a substitute for zero' ) FROM mytable
答案 1 :(得分:2)
SELECT CASE expression WHEN 0 THEN 'a substitute for zero' ELSE expression END
FROM mytable
答案 2 :(得分:0)
在这里可能有用:有一种时髦的方法可以检查表达式是否为NULL 或 0:
IFNULL(NULLIF(expr, 0), alt_expr)
如果 expr 为NULL或0,则返回 alt_expr 。否则返回 expr 。