检查mysql表中的数据前缀

时间:2011-04-06 06:43:40

标签: mysql

我需要编写一个Mysql函数,它将检查名为FeatureEntry的SQL表中的功能条目。 FeatureEntry中的数据将类似于:

    mysql> select * from FeatureEntry ;
+----+------+---------+
| Id | Code | Feature |
+----+------+---------+
|  1 | 121  | test1   |
|  2 | 122  | test2   |
|  3 | 123  | test3   |
|  5 | 125  | test5   |
|  6 | 126  | test6   |
|  7 | 127  | test7   |
|  8 | 128  | test8   |
+----+------+---------+
7 rows in set (0.00 sec)

函数将number1作为参数传递,如果该数字以FeatureEntry表中的任何Code条目为前缀,则返回0。 否则函数将返回0; 例如,当我调用mysql函数check_for_feature_code(1215676767)时,它应该返回0,因为它包含表中存在的前缀121。

mysql> select check_for_feature_code(1215676767);
+-------------------------------+
| check_for_feature_code(12156767671) |
+-------------------------------+
|                             0 |
+-------------------------------+
1 row in set, 1 warning (0.01 sec)

mysql>

如果我调用函数check_for_feature_code(67675676767),它应该返回1,因为它与表中的代码的前缀不匹配。

PS - 代码是字符串而不是整数。

1 个答案:

答案 0 :(得分:1)

这是一个函数(使用在MySQL 5.1中发布的数据集进行测试),如果给定的数字以FeatureEntry表中的代码作为前缀,则返回0,否则返回1.

CREATE FUNCTION `check_for_feature_code`(`num_in` INT)
 RETURNS TINYINT
 LANGUAGE SQL
 NOT DETERMINISTIC
 READS SQL DATA
 SQL SECURITY DEFINER
 COMMENT 'Checks for a feture code prefix'
BEGIN
 DECLARE is_featured INT;
 SELECT COUNT(*) INTO is_featured FROM FeatureEntry WHERE Code = SUBSTR(CONVERT(num_in, CHAR), 1, LENGTH(Code));
 IF is_featured = 0 THEN RETURN 1;
 END IF;
 RETURN 0;
END;

现在正在使用可变长度代码前缀。