MySQL按字符比较CHAR(m)字符

时间:2011-02-26 14:26:30

标签: c++ mysql string comparison character

在我的表中,我的一个字段有一个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,但我不确定如何做到这一点。有很多很多行,所以时间问题。

1 个答案:

答案 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