根据正则表达式生成随机字符串

最近做个项目需要生成大量测试数据,其中涉及到中文名字和中国大陆的身份证号码,原来是自己根据百家姓和我国身份证号各个字段的含义用SQL语句拼出来的,后来想想若是能根据正则表达式生成随机字符串,那就太好了,网上搜了下,有篇《SQL Server 生成测试数据的文章》是利用VS2010的数据库项目中有个生成数据的向导,试了下,果然还可以,但不太成熟,只支持一些简单的正则表达式,且还很容易出现乱码,生成中文名字看来是吗、没戏了,还不如我自己写的sql语句呢

-- create database ChineseName -- use ChineseName --create table ChineseName(name varchar(20)) -- drop table ChineseName --drop database ChineseName


--sql随机产生姓名
declare @firstNames varchar(max)    /* 保存名的集合 */
declare @lastNames varchar(max)        /* 保存姓的集合 */

--1李 2王 3张 4刘 5陈 6杨 7赵 8黄 9周 10吴 11徐 12孙 13胡 14朱 15高 16林 17何 18郭 19马 20罗 21梁 22宋 23郑 24谢 25韩 26唐 27冯 28于 29董 30萧 31程 32柴 33袁 34邓 35许 36傅 37沈 38曾 39彭 40吕 41苏 42卢 43蒋 44蔡 45贾 46丁 47魏 48薛 49叶 50阎 51余 52潘 53杜 54戴 55夏 56钟 57汪 58田 59任 60姜 61范 62方 63石 64姚 65谭 66廖 67邹 68熊 69金 70陆 71郝 72孔 73白 74崔 75康 76毛 77邱 78秦 79江 80史 81顾 82侯 83邵 84孟 85龙 86万 87段 88曹 89钱 90汤 91尹 92黎 93易 94常 95武 96乔 97贺 98赖 99龚 100文
set @firstNames='芳,海,亮,红,君,军,俊,江,河,湖,波,杰,山,燕,阳,洋,涛,斌,彬,宾,微,伟,威,薇,刚,倩'/* 必须只有一个字 注意:汉字和逗号各占一个位置*/
set @lastNames = '刘,方,王,李,赵,孙,钱,胡,易,黄,温,丁,周,魏,陈,曾,涂'    /* 必须只有一个字 */
declare @lastNamesLength int
declare @firstNamesLength int
set @lastNamesLength = (LEN(@lastNames) - 1) / 2 + 1
set @firstNamesLength = (LEN(@firstNames) - 1) / 2 + 1
declare @thirdNameRandom int
declare @firstNameRandom int
declare @lastNameRandom int

declare @resultFullNames varchar(max)
set @resultFullNames = ''

declare @i int
set @i = 1
while(@i <= 1000)
begin
	set @thirdNameRandom = CEILING(rand()*@firstNamesLength)
    set @firstNameRandom = CEILING(rand()*@firstNamesLength)
    set @lastNameRandom = CEILING(rand()*@lastNamesLength)

    /*
        产生第 1 个字,对于的 Index 为 1,注意:这里的 Index 最小值为 1。
        产生第 2 个字,对于的 Index 为 3,
        产生第 3 个字,对于的 Index 为 5,
        ...
    */
	--生成三个字的名字
    --set @resultFullNames = @resultFullNames + ( SUBSTRING(@lastNames, @lastNameRandom * 2 - 1, 1) + SUBSTRING(@firstNames, @firstNameRandom * 2 - 1, 1)+ SUBSTRING(@firstNames, @thirdNameRandom * 2 - 1, 1) + ',' )
	--set @resultFullNames =( SUBSTRING(@lastNames, @lastNameRandom * 2 - 1, 1) + SUBSTRING(@firstNames, @firstNameRandom * 2 - 1, 1)+ SUBSTRING(@firstNames, @thirdNameRandom * 2 - 1, 1))
    --生成两个字的名字
	set @resultFullNames =( SUBSTRING(@lastNames, @lastNameRandom * 2 - 1, 1) + SUBSTRING(@firstNames, @firstNameRandom * 2 - 1, 1))
	set @i = @i + 1
	insert into ChineseName values(@resultFullNames)
end
select @resultFullNames
--select count(*) from ChineseName -- select * from ChineseName --select rand()


 
现在有什么成熟的根据正则表达式生成随机字符串的方法,今天用了VS2010的新建数据库项目到时生成了一些,试了下vs2008和VS2012专业版根本就没这个功能,想和大家交流下,大家都用什么办法生成大量的测试数据呢?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值