Sql-Server
創建 SQL 隨機出生日期
有沒有人有任何 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) 生成的加密隨機數。輸出是指定字節數的十六進制數。”因此返回to
CRYPT_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())) );