【问题标题】:SQL- Creating a random varchar with length of 5SQL-创建长度为 5 的随机 varchar
【发布时间】:2015-06-26 18:43:29
【问题描述】:

我需要使用 SQL 创建一个 varchar(5) 值。字符串只能有字母和数字,不能有特殊字符。我已经尝试过(见下文),但这没有用。

CHAR(ROUND(RAND() * 93 + 30, 0));

任何关于正在发生的事情的想法将不胜感激。完整代码如下。

merge into fundtype as fund using (select fundtypnum, fundtype, country from table(values 
('JRLH5','$FOCA$01$$','USA'),
('YLHOV','$FOCA$02$$','AUS'),
('0MGJA','$FOCA$02$$','USA'),
('UK235','$FOCA$03$$','CAN'),
('HJP3C','$FOCA$03$$','USA')
))
as newfund (fundtypnum,fund_type,country) 
on (
 (fund.fund_type = newfund.fund_type and fund.country = newfund.country) or
 (fund.fundtypnum = newfund.fundtypnum)
)
when not matched then 
 insert (fundtypnum,fund_type,country) values (
    CHAR(ROUND(RAND() * 93 + 30, 0)),
    newfund.fund_type,
 newfund.country);

【问题讨论】:

  • 我建议这些步骤。 1 - 创建一个大于 1,000,000 的随机数。 2. 将其转换为十六进制。 3 - 取最右边的 5 个字符。
  • 定义“无效”。
  • 你认为你为什么需要这个?你打算用这个值做什么?

标签: sql database db2


【解决方案1】:

将 CHAR(ROUND(RAND() * 93 + 30, 0)) 更改为

CONCAT(substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',CEIL(RAND()*36),1),
    substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',CEIL(RAND()*36),1),
    substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',CEIL(RAND()*36),1),
    substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',CEIL(RAND()*36),1),
    substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',CEIL(RAND()*36),1))

【讨论】:

    【解决方案2】:

    扩展 Dan Bracuk 的评论……试试这样的:

    SELECT substring(reverse(sys.fn_varbintohexstr(CONVERT(varBINARY(8),
    ABS(Checksum(NewID()) % 1000000)))),1,5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 1970-01-01
      • 2013-02-18
      • 2012-10-05
      • 2015-07-28
      • 1970-01-01
      相关资源
      最近更新 更多