1

カテゴリのテーブルがあります。
このような記録があります

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

このテーブルには多くのレコードがあります。このようなカテゴリ名でシンボル フィールドを更新し、カテゴリ名を取得し、3 つのランダムな文字を抽出し (順序どおりで、常に 2 つのランダムな最初の文字を選択する必要があります)、それらを大文字に変換して更新を適用します。どうやってやるの。
たとえば、オーブンを OVE、OVN、OVS、OEN、OES などで更新したいのですが
、1 つのクエリでこれを行うにはどうすればよいですか。

これは私が試したものですが、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 に答える