由於我在this question中工作的測試查詢方法沒有解決,所以我正在嘗試其他方法。有沒有辦法告訴pg的random()
函數讓我只有1到10之間的數字?生成一個範圍內的隨機數1 - 10
回答
如果在1和10之間的數字你指任何浮點數即> = 1和< 10,則很容易:
select random() * 9 + 1
# select min(i), max(i) from (
select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
min | max
-----------------+------------------
1.0000083274208 | 9.99999571684748
(1 row)
如果你想整數,是> = 1和< 10,那麼它很簡單:
這可以很容易地測試
select trunc(random() * 9 + 1)
再次,簡單的測試:
# select min(i), max(i) from (
select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
min | max
-----+-----
1 | 9
(1 row)
(TRUNC(隨機()* 10)%10)+ 1
錯誤:運算符不存在:雙精度%整數 – 2012-08-14 15:02:42
爲什麼你會使用模數呢?這個邏輯沒有意義。如果你得到任何「包裝」,你將不會有平等的分配,如果你沒有得到任何,那麼你不需要它。 – ErikE 2012-08-14 22:47:48
其實我不知道你想這一點。
試試這個
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
總結,有點簡化,你可以使用:
-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);
你可以測試這個喜歡用@提到user80168
-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
[文檔說](https://www.postgresql.org/docs/10/static/functions-math.html)「0.0 <= x <1.0」範圍內的隨機值,所以至少有一個理論'ceil(random()* 10)'產生0的機會 - 我會堅持'floor'。 – 2018-01-15 08:48:57
如果您正在使用SQL Server,那麼正確的方式來獲取整數是
SELECT Cast(RAND()*(b-a)+a as int);
凡
- 'b' 爲上限
- 'a' 爲下限
這裏要小心,如果你把你的下限設爲1,上限設爲10,你只會得到數字1-> 9。其他答案似乎認爲,1到10之間意味着1-> 9 ...我認爲如果'之間'排除上限,它也應該排除下限(即2-> 9)。 SELECT Cast(RAND()*((b + 1)-a)+ a as int); – Morvael 2016-12-08 09:09:18
此存儲的過程中插入一個蘭特數插入表中。看,它插入一個無窮無盡的數字。當你得到足夠的數字時停止執行它。
創建一個表指針:
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
GO
創建一個表來包含你的號碼:
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
插入腳本:
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
創建和E XECUTING程序:
CREATE PROCEDURE [dbo].[RandNumbers] AS
BEGIN
Declare CURSE CURSOR FOR (SELECT [Cursor] FROM [dbo].[SearchIndex] WHERE [Cursor] IS NOT NULL)
DECLARE @RandNoSscript NVARCHAR (250)
OPEN CURSE
FETCH NEXT FROM CURSE
INTO @RandNoSscript
WHILE @@FETCH_STATUS IS NOT NULL
BEGIN
Print @RandNoSscript
EXEC SP_EXECUTESQL @RandNoSscript;
END
END
GO
填寫表格:
EXEC RandNumbers
問題是關於Postgres,而不是SQL Server – 2017-01-27 08:59:29
hythlodayr的答案的正確版本。
-- ERROR: operator does not exist: double precision % integer
-- LINE 1: select (trunc(random() * 10) % 10) + 1
輸出從trunc
必須被轉換到INTEGER
。但它可以在沒有trunc
的情況下完成。所以結果很簡單。
select (random() * 9)::INTEGER + 1
生成在範圍[1,10]即兩個1 & 10的整數輸出。
對於任何數字(浮點數),請參閱user80168的答案。即只是不要將其轉換爲INTEGER
。
- 1. 如何生成10個隨機數,範圍爲1到100?
- 2. 在隨機字節的給定範圍內生成隨機數
- 3. Java在特定範圍內生成一個隨機數?
- 4. 如何在C範圍內生成一個隨機數?
- 5. 如何從範圍從1開始生成js的隨機數?
- 6. 隨機數字生成器Javascript - 範圍
- 7. 生成一個隨機數落入多個範圍
- 8. 使用C#在一個範圍內產生一個隨機數
- 9. 從大的範圍內產生一個隨機數,除了從大的範圍
- 10. 如何生成給定範圍內的隨機數?VB.NET
- 11. 如何從一個範圍內生成3個非重複的隨機數字?
- 12. C++生成隨機數-1
- 13. 生成10次隨機數
- 14. Movable Type:如何生成一定範圍的隨機數?
- 15. 在excel中生成一個隨機數字範圍
- 16. 在[-1,1]範圍內生成隨機數組
- 17. 生成多個之間的隨機數範圍
- 18. 生成範圍內的隨機時間,並且是奇數
- 19. 用概率分佈生成範圍內的隨機整數
- 20. 在iOS中生成範圍內的隨機數?
- 21. 範圍內的隨機(雙值)數生成器
- 22. 如何在每個數字位於數字範圍內生成隨機數字?
- 23. 的javascript:從範圍生成2個隨機,但不同數字
- 24. 在集羣環境中生成一個範圍內(0-100k)的隨機數
- 25. 如何在c中生成一個範圍內的隨機數字#
- 26. 使用php生成1到10之間的30個隨機數
- 27. 如何在一個類構造函數內的一個設定範圍內(不重複!)生成隨機int數?
- 28. 獲取用戶輸入的範圍內的隨機生成
- 29. 在C++中生成一個隨機數,包括一個負範圍
- 30. 生成兩個範圍之間的隨機整數
從事件e中選擇日期(e.created_at)+(trunc(random()* 20)); 結果在: 錯誤:運算符不存在:日期+雙精度 trunc是否真的返回整數? – 2010-01-26 12:44:28
'trunc()'返回與輸入相同的數據類型(如手冊中所述)。你需要將結果轉換爲一個整數:'trunc(random()* 20):: int' – 2011-10-05 17:35:47
我想知道至少在理論上有可能'random()'返回一個小於1的值,乘以由於[雙精度類型的不精確性質],9會大於9(http://www.postgresql.org/docs/9.1/static/datatype-numeric.html#DATATYPE-FLOAT)?在實踐中,即使有可能,當然也不會因爲15位或更精確的數字而消失。 – 2012-08-14 14:54:26