婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作

SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作

熱門標簽:萬利達綜合醫(yī)院地圖標注點 武漢AI電銷機器人 電銷機器人 深圳 實體店地圖標注怎么標 外呼系統(tǒng)會封嗎 地圖標注如何弄全套標 股票配資電銷機器人 在電子版地圖標注要收費嗎 南京電銷外呼系統(tǒng)哪家好

需求是使用sqlserver根據(jù)指定的數(shù)字和表生成一串連續(xù)的數(shù)字,類似于oracle中ROWNUM的功能,具體實現(xiàn)如下:

一、Oracle使用ROWNUM實現(xiàn)方式

SELECT 
 ROWNUM number_list
FROM 表名
WHERE ROWNUM = 10;

二、SqlServer實現(xiàn)上述功能的三種方式

1.使用MASTER…spt_values方式

SELECT
 number 
FROM
 MASTER..spt_values 
WHERE
 TYPE = 'P' 
 AND number > 0 
 AND number = 10;

spt_values是master數(shù)據(jù)庫中的一張系統(tǒng)表,number的數(shù)值范圍是0~2047

2.使用String_Split函數(shù)實現(xiàn)

select row_number() over (order by (select 1)) from String_Split(space(6),' ')

String_Split是SQLServer 2016的新函數(shù),這個方法只對2016及后續(xù)版本有效。

(我的數(shù)據(jù)庫版本是2008,此方式未驗證)

3.使用top+ROW_NUMBER () OVER方式實現(xiàn)

SELECT TOP
 10 ROW_NUMBER () OVER (
ORDER BY
 (SELECT 1)) number_list 
FROM
(SELECT TOP 10 * FROM 表名) t;

第一種方式對數(shù)據(jù)庫版本無要求,但是取值范圍有限制0~2047;

第二種方式對數(shù)據(jù)庫版本有要求,要在2016及之上;

第三種方式對數(shù)據(jù)庫版本無要求,只要表里的數(shù)據(jù)量大于要生成的數(shù)字即可;

補充知識:數(shù)據(jù)庫生成測試數(shù)據(jù)(SQL實現(xiàn))

需求

項目中偶爾會有造數(shù)據(jù)進行測試的情況,根據(jù)常見的數(shù)據(jù)特征,我這里假設數(shù)據(jù)某表Table_X含4個字段,每個字段的要求如下,需要造出5000條數(shù)據(jù)。

以上需求看上去非常簡單,但比較具有代表性,復雜需求也是由小需求排列組合而成。

功能準備

隨機數(shù)

造數(shù)的核心功能是生成隨機數(shù),SQL Server下有RAND()系統(tǒng)函數(shù)可以生成0到1之間的小數(shù),利用它可以生成固定區(qū)間 [Min,Max] 的小數(shù):Min + (Max - Min) * RAND(),另外CHECKSUM(NEWID())也可以生成一串比較大的整數(shù)(9位或10位數(shù)居多),再配合ABS取絕對值和取模運算,就可以很好的控制所生成隨機數(shù)的范圍了。

區(qū)間隨機數(shù)函數(shù)

為了SQL寫起來方便,可事先創(chuàng)建一個自定義函數(shù),用來生成區(qū)間隨機數(shù):

CREATE VIEW vwRand
AS
SELECT RAND() AS RandValue
GO

CREATE FUNCTION dbo.Random_Range
(
  @Min DECIMAL(22,5)
  ,@Max DECIMAL(22,5)
)RETURNS DECIMAL(22,5)
-- return value between @Min and @Max
BEGIN
  DECLARE @Result DECIMAL(22,5);
  SELECT @Result = @Min + (@Max - @Min) * RandValue FROM vwRand;
  RETURN @Result
END
GO

這里先創(chuàng)建了一個視圖,然后在函數(shù)體內(nèi)引用,是因為SQL Server不支持直接在函數(shù)體中引用RAND函數(shù),會報錯Invalid use of a side-effecting operator ‘rand' within a function.。

列表選擇

如果是從少量的枚舉數(shù)值中選擇,可以使用CHOOSE函數(shù)。

若從大量候選項中選擇,可將數(shù)據(jù)導入含自增列的數(shù)據(jù)庫表后,通過標量子查詢進行選擇。

造數(shù)SQL

SELECT TOP 5000
  ABS(CHECKSUM(NEWID())) % 100 + 1 AS Col_A
  ,dbo.Random_Range(5000, 10000) AS Col_B
  ,ISNULL(CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'S', 'M', 'L', 'XL', 'XXL'), 'M') AS Col_C
  ,DATEADD(DAY, dbo.Random_Range(0, DATEDIFF(DAY, '20000101', '20201231')), '20000101') AS Col_D
FROM sys.all_columns

說明

實際需求可能字段非常多,但基本都可以用以上寫法,修改參數(shù)即可;

SQL的功能畢竟有限,基本只適合從固定列表中隨機選擇,以及生成隨機數(shù)值性數(shù)據(jù)的場景;

若要造出更符合業(yè)務領域特性的數(shù)據(jù),比如批量生成城市名、郵箱、人名、手機號、地址等數(shù)據(jù),用純SQL就會有點吃力了,下一篇將介紹如何用python的faker庫生成測試數(shù)據(jù)。

以上這篇SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • SQL server 自增ID--序號自動增加的字段操作
  • SQL Server中identity(自增)的用法詳解
  • SQL Server 開窗函數(shù) Over()代替游標的使用詳解
  • SQL Server中row_number函數(shù)的常見用法示例詳解
  • SQL Server如何通過創(chuàng)建臨時表遍歷更新數(shù)據(jù)詳解
  • 解決sql server保存對象字符串轉(zhuǎn)換成uniqueidentifier失敗的問題

標簽:廣東 臺州 武威 安徽 泰安 汕頭 濟寧 濟源

巨人網(wǎng)絡通訊聲明:本文標題《SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作》,本文關鍵詞  SqlServer,生成,連續(xù),數(shù)字,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作》相關的同類信息!
  • 本頁收集關于SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 青川县| 丰台区| 太康县| 富蕴县| 钟祥市| 临汾市| 通榆县| 九江市| 当阳市| 田阳县| 图木舒克市| 浦城县| 菏泽市| 台南县| 大名县| 扶风县| 威远县| 屏边| 伊金霍洛旗| 茂名市| 临海市| 崇阳县| 诏安县| 龙海市| 万盛区| 句容市| 桓台县| 平邑县| 远安县| 莱芜市| 观塘区| 若尔盖县| 金川县| 香港 | 库伦旗| 瓦房店市| 巴林左旗| 奇台县| 石河子市| 乌兰察布市| 莒南县|