我需要编写一个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 - 代码是字符串而不是整数。
答案 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;
现在正在使用可变长度代码前缀。