在我的表中,我的一个字段有一个CHAR类型(26)。而不是使用STRCMP()来比较每个字符,并在不匹配时停止,我想比较所有字符。在带有std :: string或任何类型向量的C ++函数中,它看起来如下所示:
bool lesser(str1, str2) //str1 < str2
{
for (int i = 0; i < str1.length(); i++)
if (str2[i] < str1[i]) return false;
return true;
}
可以在MySQL中执行此操作吗?我听说过UDF,但我不确定如何做到这一点。有很多很多行,所以时间问题。
答案 0 :(得分:1)
我不知道有一个mysql函数可以做你的C ++代码所做的事情,但你应该可以用你自己的函数来做。我没有测试过这段代码,但它可能看起来像这样:
CREATE FUNCTION mylesser(s1 CHAR(26), s2 CHAR(26))
RETURNS BOOL
BEGIN
DECLARE ndx INT DEFAULT 0;
WHILE ndx < LENGTH(s1) DO
IF ORD(MID(s2, ndx, 1)) < ORD(MID(s1, ndx, 1)) THEN
RETURN 0;
END IF
SET ndx = ndx + 1;
END WHILE;
RETURN 1
END;
ORD(MID(string,index,1))是我能够找到在特定位置获取字符串中字符值的唯一方法。
我会尝试一下,看看它对你来说是否足够快。如果没有,你可以编写一个C函数来做同样的事情,并将它作为UDF提供给mysql。我没有任何经验,但这里是它的文档:http://dev.mysql.com/doc/refman/5.0/en/adding-functions.html