mysql - 检查 mysql 表中的数据前缀

标签 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 表中的任何代码条目为前缀,则返回 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 -- 代码是字符串而不是整数。

最佳答案

这是一个函数(在 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;

这现在适用于可变长度代码前缀。

关于mysql - 检查 mysql 表中的数据前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562403/

相关文章:

Mysql 和 "count"

php - MySQL Inner Join 涉及三个表

php - 从 2 个表中选择具有第 3 个表的链接属性值的数据

php - Wordpress 从另一个数据库获取最新的帖子

MySQL查找/替换为内部唯一的字符串

Android Mediastore 和外部数据库

MySQL WHERE IN 问题

php - 关于改进这些查询(MySQL)的想法?我的生产机器在他们身上看到了 10 秒的时间(使用超过 1000 的样本量)

mysql - 关于对象关系映射器(ORM)执行关系数据库(连接)工作的问题

mysql - 如何汇总来自 mySQL 的所有访问并像组一样为每个 id 显示它?