Sql-Server

創建 SQL 隨機出生日期

  • June 27, 2018

有沒有人有任何 SQL 程式碼來自動生成隨機出生日期,其中出生日期小於今天?請添加出生日期範圍參數,例如:從 18 到 70 歲。

是否有任何內聯 SQL 或函式來執行此操作?

我們試圖混淆我們的專欄[Date of Birth]

謝謝,

這會將隨機天數添加到 1900 年 1 月 1 日:

SELECT DATEADD(DAY, CONVERT(int, CRYPT_GEN_RANDOM(2)), '1900-01-01T00:00:00');

根據 Microsoft Docs,CRYPT_GEN_RANDOM“返回由 Crypto API (CAPI) 生成的加密隨機數。輸出是指定字節數的十六進制數。”

因此返回toCRYPT_GEN_RANDOM(2)範圍內的兩字節數字,當轉換為有符號整數並“添加” to 時,將導致 to 範圍內的日期。0x0000``0xFFFF``1900-01-01``1900-01-01``2079-06-06

對於名為 的表dbo.MyTable,具有名為 的列[Date of Birth],這會將所有列值更新為隨機生成的日期:

UPDATE dbo.MyTable
SET [Date of Birth] = DATEADD(DAY, CONVERT(int, CRYPT_GEN_RANDOM(2)), '1900-01-01T00:00:00');

可以顛倒邏輯,使您擁有從 0 天到大約 59 歲的不同年齡的人:

UPDATE dbo.MyTable
SET [Date of Birth] = DATEADD(DAY, (1 - CONVERT(int, CRYPT_GEN_RANDOM(2)) / 3), GETDATE());

以下範例將隨機選擇出生日期,導致年齡在 10 到 20 歲之間:

DECLARE @MinAge int;
DECLARE @MaxAge int;

SET @MinAge = 10;
SET @MaxAge = 20;
UPDATE dbo.MyTable
SET [Date of Birth] = DATEADD(DAY
   , (1 - (CONVERT(int, CRYPT_GEN_RANDOM(2)) % ((@MaxAge - @MinAge) * 365)))
   , CONVERT(date, DATEADD(YEAR, 1 - @MinAge, GETDATE()))
   );

引用自:https://dba.stackexchange.com/questions/205468