我有一个Categories表
我有这样的记录
id | name | symbol
1 | Feeders | FEE
2 | Ovens |
3 | Routers |
我在这张表上有许多记录。我想用这样的类别名称更新符号字段,以获得类别名称,提取3个随机字符(必须按顺序,并且总是用2个随机字符选择第一个字符),然后将它们转换为大写并应用更新。我怎么能那样做
例如,我希望烤箱更新为OVE或OVN或OVS或OEN或OES等。
如何在一个查询中完成此操作。
这是我尝试过的,但它有时会带来1个字符,有时是2个,有时是3个
UPDATE category
SET symbol = (select
upper(SUBSTRING(name, 1+ FLOOR(RAND()*LENGTH(name)),3))
from default_category
where category_id = 2)
where category_id = 2
这就是您想要的吗?
UPDATE YourTable
SET symbol = UPPER(LEFT(name,3))
您可以使用这样的查询来计算符号的随机值:
SELECT
id,
name,
UPPER(CONCAT(
LEFT(name,1),
SUBSTRING(name, FLOOR(r1), 1),
SUBSTRING(name, FLOOR(FLOOR(r1) + rand()*(LENGTH(name) - r1 DIV 1) + 1), 1))) symbol
FROM (
SELECT
id,
name,
case when LENGTH(name)<=3 THEN 2 ELSE rand()*(
LENGTH(name)-2)+2 END r1
FROM
categories
) s;
这可能是您的UPDATE查询:
UPDATE
categories INNER JOIN (
SELECT
id,
name,
UPPER(CONCAT(
LEFT(name,1),
SUBSTRING(name, FLOOR(r1), 1),
SUBSTRING(name, FLOOR(FLOOR(r1) + rand()*(LENGTH(name) - r1 DIV 1) + 1), 1))) symbol
FROM (
SELECT
id,
name,
case when LENGTH(name)<=3 THEN 2 ELSE rand()*(
LENGTH(name)-2)+2 END r1
FROM
categories
) s
) symb
ON categories.id=symb.id
SET
categories.symbol = symb.symbol
请看这儿的小提琴。