【问题标题】:How to replace text with a random number in SQL?如何在 SQL 中用随机数替换文本?
【发布时间】:2016-05-05 16:51:32
【问题描述】:

我有 HeidiSQL,我有一个 3MB 的查询需要运行,但我想用随机数替换某些文本/值。我该怎么做?

我需要替换它,因为有很多行。

INSERT INTO creature (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES
('@CGUID+0', 83855, 1116, 0, 0, 3, '0', 0, 0, 0, 1504.222, -2147.853, 90.73972, 0.6455684, 7200, 10, 0, 0, 0, 1, 0, 0, 0, 21463), -- 83855 (Area: 7120) (possible waypoints or random movement)
('@CGUID+1', 81244, 1116, 0, 0, 3, '0', 0, 0, 0, 1514.845, -2106.458, 92.60474, 2.908402, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 21463), -- 81244 (Area: 7120) (Auras: 163908 - 163908)
('@CGUID+2', 81244, 1116, 0, 0, 3, '0', 0, 0, 0, 1484.29, -2122.714, 92.58028, 1.293478, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 21463), -- 81244 (Area: 7120) (Auras: 163908 - 163908)

所以基本上我想替换 @CGUID+ 所在的位置并添加一个随机数(最好在 1-999999 之间)。因此,它会添加到当前数字上,如下所示:

'4820940' '2850331' '2854962'

请注意,每个最后一位数字都没有改变,它只是被替换的第一个文本。但我需要它是随机的。

【问题讨论】:

  • 只是为了确认:您需要这样做是因为您需要打乱数据?
  • 另外,由于 HeidiSQL 只是一个工具,请问您正在分析/管理哪个数据库:MySQL、SQLServer 或 Postgres?
  • @Chris 欢迎来到 SO。当您发布时,您需要向我们提供更多信息。您的查询是什么样的?您要访问什么数据库?你已经尝试过什么?

标签: sql heidisql


【解决方案1】:

如果您使用的是 MySQL 或 SQLServer,那么这样做的方法如下:

SELECT Replace(real_field1,'value to be replaced','new value') as scrambled_field1
FROM <any table>
WHERE <filter>

如果您提出问题,我可以帮助您。

根据您的 SQL 命令,您可以尝试这样的操作。我正在简化您的查询只是为了显示语法:

insert into table(column1) values (REPLACE('@CGUID+1','@CGUID',FLOOR(RAND()*(99999-1)+1))

【讨论】:

  • 是的,我正在使用 MySQL。但你必须原谅我缺乏知识。我不确定那里要填写什么。我想基本上替换文本 '@CGUID+' 但是有 5k 行,我希望它们都有一个随机数。
  • 好的,请提出您的问题,并展示一些您想要替换的示例。
  • 我不能。查询是 3MB 并且太长了。有 5990 行。我可以发布吗?
  • 粘贴查询命令(SELECT ... FROM ...)和类似 3 行的内容,并显示您希望如何替换它们上的值。
  • 问题是我需要对所有 5000+ 行做同样的事情。有什么想法吗?
【解决方案2】:

按照问题中的说明运行 INSERT INTO 语句。 然后运行以下查询:

UPDATE creature
    SET guid = REPLACE(guid, '@CGUID+', ROUND((RAND() * (999999-1))+1))
    WHERE guid LIKE '@CGUID+%'

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2019-08-14
    • 1970-01-01
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多