日度归档:2019年8月6日

mssql sqlserver 使用sql脚本快速生成1000个不重复的随机数的方法分享


摘要:
下文讲述生成1000个随机的纯数字的随机数的方法分享,如下所示:
实验环境:sqlserver 2012


实现思路:
使用while循环和rand、floor函数,然后使用cast将数字转换为整型

    DECLARE @i INT=0;--循环起始变量
    DECLARE @j INT; ---临时数存放变量

    DECLARE @qty INT=1000; --所需随机数数量

   SET NOCOUNT ON
   
   declare @tmp table(numberInfo int)--随机数存放表
    WHILE(@i<@qty )
    BEGIN
      SELECT @j = cast( floor(rand()*(99999999-10000000)+10000000) as int) 

      ---随机数是否已存在判断
      IF(NOT EXISTS(SELECT null  FROM @tmp WHERE numberInfo=@j ))
      BEGIN
        INSERT INTO  @tmp (numberInfo) VALUES (@j)
        SET @i+=1;
      END

    END

    ---数据展示
    select numberInfo from @tmp  as t 
 
mssql_sqlserver_随机数生成方法

mssql_sqlserver_随机数生成方法

mssql sqlserver 如何分拆一个字符串呢?


摘要:
下文讲述使用sql脚本的方法分拆一个字符串,如下所示:
实验环境:sql server 2012


在日常的开发中,我们经常需要对一个组合后的字符串拆分为行集的数据表,下文将通过举例的方式讲述拆分字符串的方法,如下:


实现思路:
使用while、substring、charindex关键字依次处理

declare @source nvarchar(100)
declare @split  nvarchar(30)


set @source = N',maomao365.com,sqlblog,爱好者' ---待分隔字符串
set @split =','; ---分隔符
 

declare @tmp table(info nvarchar(100))
declare @i int
set @i  =  charindex(@split,@source)


while @i >0
begin
   insert into @tmp(info) 
    select substring(@source,0,@i)

	set @source = substring(@source,@i+1,len(@source)-@i)
    set @i  =  charindex(@split,@source) 


	if @i =0
	 begin
	   insert into @tmp (info)values(@source)
	 end
end


select * from @tmp as t 
 

mssql sqlServer 2012 OFFSET 和 FETCH 使用注意事项


摘要:
下文讲述sqlsever中使用offset fetch进行分页操作时的注意事项,如下所示:
实验环境:sql server 2012



offset fetch功能说明

offset fetch功能主要是用于快速分页。
offset fetch 语法如下所示:

  ORDER BY order_by_expression
    [ COLLATE collation_name ] 
    [ ASC | DESC ] 
    [ ,...n ] 
    [<offset_fetch>]
 
     <offset_fetch> ::=
     { 
         OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
          [
           FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
          ]
     }

offset 举例应用:

       
 create table maomao
(
	keyId int identity,
	writeDate datetime default getdate() 
)
go

---生成基础数据
set nocount on

insert into maomao default values
go 20

set nocount off
 
 ---跳过第一行,显示其余数据
 SELECT keyId,writeDate  FROM  maomao 
    ORDER BY keyId 
     OFFSET 1 ROWS
	 
 ---跳过前5行,显示3行数据
 SELECT keyId,writeDate  FROM  maomao 
    ORDER BY keyId 
     OFFSET 5 ROWS
	FETCH NEXT 3 ROWS ONLY
go
truncate table maomao
drop     table maomao 


注意事项:
1 offset fetch 必须和order by 一起使用
2 FIRST 和 NEXT 是同义词,是为了与 ANSI 兼容而提供的。
3 ROW 和 ROWS 是同义词,是为了与 ANSI 兼容而提供的
4 offset 和 fetch 两个关键字中
offset 表示跳过行数
fetch 表示显示多少行
4.1 offset 可单独使用
4.2 fetch 必须 结合offset一起使用,fetch关键字不可单独使用