找到LIKE时,mysql SELECT 0或1

时间:2015-03-27 04:55:19

标签: mysql sql

我正在寻找一种在找到LIKE时返回0/1的方法。 我让它在一个使用MATCH AGAINST的不同查询上使用CASE IF语句。但我似乎无法让这个工作。 例如:这在查询的SELECT部分​​中起作用。

SELECT *, (CASE WHEN IF((MATCH (name) AGAINST ("rubert"  IN BOOLEAN MODE))>=1, 1, 0) = 1 THEN 1 ELSE 0 END) as r2....

但我正在寻找0或1对抗LIKE。

当量

SELECT *, (CASE WHEN IF (name LIKE "%rubert%") == FOUND) THEN 1 ELSE 0 END) as found FROM....

有一种感觉我真的很亲密,但似乎没有完全明白......

2 个答案:

答案 0 :(得分:3)

你过度复杂了。

SELECT name LIKE '%rubert%' FROM...

在MySQL中,所有布尔值都表示为10LIKE返回布尔值。不需要工作。

MATCH查询需要IF的原因是MATCH返回浮点数而不是布尔值;否则,这就够了:

SELECT MATCH name AGAINST ('rubert' IN BOOLEAN MODE) AS score FROM...

虽然要减少它,但是你经历了IFCASE,这太过分了,因为这已经足够了:

SELECT IF(MATCH name AGAINST ('rubert' IN BOOLEAN MODE) > 1, 1, 0) AS goodenough FROM...

答案 1 :(得分:-1)

您可以按功能

包装它
USE `test`;
DROP function IF EXISTS `is_exists`;

DELIMITER $$
USE `test`$$
CREATE FUNCTION `test`.`is_exists` (q varchar(50))
RETURNS INTEGER
BEGIN
DECLARE is_exist INT(11);
DECLARE que varchar(50);
SELECT CONCAT("%",q,"%") INTO que; 
SELECT count(*) into is_exist FROM `test`.`users` WHERE `fname` LIKE que;
IF is_exist >0 THEN 
RETURN 1;
ELSE
RETURN 0;
END IF;
END;$$

DELIMITER ;

而不是

SELECT is_user_exists("your query");
祝你好运!