1

我以前用过这个...

UPDATE whatever_table SET whatever_col = SUBSTRING(MD5(RAND()) FROM 1 FOR 12)

... 将随机字符串添加到 mysql 表中。

现在,同样,我希望在表中的所有记录中添加一个字母数字“PIN”(这将只有几百条记录。)“PIN”应该是字母数字,但应该排除“1”、“0”、 'O'、'l' 等

谁能告诉我如何更新上面的查询以排除这些模棱两可的字符?

TIA

4

2 回答 2

0

除了 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

于 2013-09-17T10:59:39.307 回答
0

对于数字:

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

于 2013-09-17T11:12:35.637 回答