1

我有一个类别表。
我有这样的记录

id    |    name    |    symbol
1     | Feeders    |    FEE
2     | Ovens      |
3     | Routers    |

我在这张表中有很多记录。我想用这样的类别名称更新符号字段,获取类别名称,提取 3 个随机字符(必须按顺序并始终选择第一个随机字符),然后将它们转换为大写并应用更新。我怎样才能做到这一点。
例如,我希望使用 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
4

2 回答 2

2

这是你要找的吗?

UPDATE YourTable
SET symbol = UPPER(LEFT(name,3))
于 2013-02-21T19:10:16.297 回答
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

请看这里的小提琴。

于 2013-02-21T19:36:25.500 回答