我以前用过这个...
UPDATE whatever_table SET whatever_col = SUBSTRING(MD5(RAND()) FROM 1 FOR 12)
... 将随机字符串添加到 mysql 表中。
现在,同样,我希望在表中的所有记录中添加一个字母数字“PIN”(这将只有几百条记录。)“PIN”应该是字母数字,但应该排除“1”、“0”、 'O'、'l' 等
谁能告诉我如何更新上面的查询以排除这些模棱两可的字符?
TIA
我以前用过这个...
UPDATE whatever_table SET whatever_col = SUBSTRING(MD5(RAND()) FROM 1 FOR 12)
... 将随机字符串添加到 mysql 表中。
现在,同样,我希望在表中的所有记录中添加一个字母数字“PIN”(这将只有几百条记录。)“PIN”应该是字母数字,但应该排除“1”、“0”、 'O'、'l' 等
谁能告诉我如何更新上面的查询以排除这些模棱两可的字符?
TIA
除了 NB 的评论之外,逻辑在 PL/SQL 中是有意义的,但在 (My)SQL 中严重没有。
REPLACE(str,from_str,to_str)
返回字符串 str,其中所有出现的字符串 from_str 都替换为字符串 to_str。
REPLACE()
搜索 from_str 时执行区分大小写的匹配。
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
这个函数是多字节安全的。
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace
对于数字:
select concat(2+floor(rand()*8), 2+floor(rand()*8))
根据需要重复 2+floor(rand()*8) 的位数
对于字母数字,只需使用替换。或者,您可以使用允许的值创建一个表并将其交叉连接以创建唯一的引脚,并使用 rand 整数调用这些引脚。
编辑:找到另一种更好的方法 - 将 rand int 转换为基数 8(0 到 7 之间的数字),然后将 2 添加到每个数字,使所有数字都在 2 到 9 之间
选择 conv(floor(rand()*10000), 10 ,8)+22222