91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Sql Server如何實現生成連續數字根據指定的數字

發布時間:2020-10-26 18:36:05 來源:億速云 閱讀:829 作者:Leah 欄目:開發技術

Sql Server如何實現生成連續數字根據指定的數字?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、Oracle使用ROWNUM實現方式

SELECT 
 ROWNUM number_list
FROM 表名
WHERE ROWNUM <= 10;

Sql Server如何實現生成連續數字根據指定的數字

二、SqlServer實現上述功能的三種方式

1.使用MASTER…spt_values方式

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

Sql Server如何實現生成連續數字根據指定的數字

spt_values是master數據庫中的一張系統表,number的數值范圍是0~2047

2.使用String_Split函數實現

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

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

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

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

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

Sql Server如何實現生成連續數字根據指定的數字

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

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

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

補充知識:數據庫生成測試數據(SQL實現)

需求

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

Sql Server如何實現生成連續數字根據指定的數字

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

功能準備

隨機數

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

區間隨機數函數

為了SQL寫起來方便,可事先創建一個自定義函數,用來生成區間隨機數:

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

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

列表選擇

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

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

造數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

說明

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

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内丘县| 长顺县| 保定市| 寿光市| 北宁市| 准格尔旗| 开阳县| 金阳县| 罗平县| 吉首市| 乐陵市| 涞源县| 普格县| 鲁山县| 临潭县| 新蔡县| 兴仁县| 锡林浩特市| 屏山县| 贵德县| 洪洞县| 都昌县| 石河子市| 柳州市| 甘孜| 宁波市| 罗定市| 内江市| 衡山县| 伊川县| 德格县| 凭祥市| 濮阳县| 五台县| 棋牌| 吉木乃县| 浦北县| 绍兴市| 宁明县| 申扎县| 应用必备|