任何想法为什么这样做合理*:
mysql> select lower('AB100c');
+-----------------+
| lower('AB100c') |
+-----------------+
| ab100c |
+-----------------+
1 row in set (0.00 sec)
但这不是吗?
mysql> select lower(concat('A', 'B', 100,'C'));
+----------------------------------+
| lower(concat('A', 'B', 100,'C')) |
+----------------------------------+
| AB100C |
+----------------------------------+
1 row in set (0.00 sec)
*明智地='我认为应该有效的方式。'
答案 0 :(得分:7)
<强> LOWER(STR)强>
LOWER()在应用时无效 二进制字符串(BINARY,VARBINARY, BLOB)。
<强> CONCAT(STR1,STR2,...)强>
返回由此产生的字符串 连接参数。可能有 一个或多个参数。我摔倒 参数是非二进制字符串, result是一个非二进制字符串。如果 参数包括任何二进制字符串 结果是二进制字符串。的 A 强> 数字参数转换为 等效的二进制字符串形式;如果你 想要避免这种情况,您可以使用 显式类型广告。
在您的代码中,您将100作为数字传递,因此concat将返回二进制字符串,并且当应用于二进制字符串时,lower是无效的,这就是它未被转换的原因。如果你想转换你可以试试这个:
select lower(concat('A', 'B', '100','C'));
答案 1 :(得分:2)
lower用于将STRINGS转换为小写。但您的值100被视为数字。如果您仍希望获得小写转换的结果,则应将数字括在引号中,如下所示:
select lower(concat('A', 'B', '100','C'));
我已经对此进行了测试,效果很好。
答案 2 :(得分:-1)
这是另一个使用CONCAT和LIKE的例子
LOWER(CONCAT(firstname, ' ', lastname)) LIKE LOWER('%my name%')