我有一张类别表 我有这样的记录
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
答案 0 :(得分:2)
这是你要找的吗?
UPDATE YourTable
SET symbol = UPPER(LEFT(name,3))
答案 1 :(得分:1)
您可以使用这样的查询来计算符号的随机值:
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
请参阅小提琴here。