जवाबों:
अगर 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()
उसी डेटा प्रकार को इनपुट के रूप में देता है (जैसा कि मैनुअल में कहा गया है)। आपको परिणाम को पूर्णांक में trunc(random() * 20)::int
random()
एक मान लौटाएगा <1 कि जब 9 से गुणा किया जाता है = = 9 दोहरे सटीक प्रकार की अक्षम्य प्रकृति के कारण ? व्यवहार में भले ही यह संभव हो, 15 अंकों या इतनी सटीकता के कारण यह गायब नहीं होगा।
संक्षेप और थोड़ा सरल करने के लिए, आप उपयोग कर सकते हैं:
-- 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;
ceil(random() * 10)
0 में जिसके परिणामस्वरूप - मैं करने के लिए छड़ी होगी floor
।
SELECT floor(random() * 10 + 1);
यदि आप SQL सर्वर का उपयोग कर रहे हैं तो पूर्णांक प्राप्त करने का सही तरीका है
SELECT Cast(RAND()*(b-a)+a as int);
कहाँ पे
(trunc (random () * 10)% 10) + 1
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] रेंज में एक INTEGER आउटपुट उत्पन्न करता है अर्थात दोनों 1 और 10 समावेशी।
किसी भी संख्या (फ़्लोट्स) के लिए, उपयोगकर्ता 80168 का उत्तर देखें। यानी बस इसे बदलने के लिए नहीं है INTEGER
।
वास्तव में मैं नहीं जानता कि आप यह चाहते हैं।
इसे इस्तेमाल करे
INSERT INTO my_table (my_column)
SELECT
(random() * 10) + 1
;
यह संग्रहीत कार्यविधि एक रैंड संख्या को एक तालिका में सम्मिलित करती है। बाहर देखो, यह एक अंतहीन संख्या सम्मिलित करता है। जब पर्याप्त संख्या मिल जाए तो इसे निष्पादित करना बंद कर दें।
कर्सर के लिए एक तालिका बनाएं:
CREATE TABLE [dbo].[SearchIndex](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Cursor] [nvarchar](255) NULL)
जाओ
अपनी संख्याएँ रखने के लिए एक तालिका बनाएँ:
CREATE TABLE [dbo].[ID](
[IDN] [int] IDENTITY(1,1) NOT NULL,
[ID] [int] NULL)
SCRIPT में शामिल:
INSERT INTO [SearchIndex]([Cursor]) SELECT N'INSERT INTO ID SELECT FLOOR(rand() * 9 + 1) SELECT COUNT (ID) FROM ID
बनाने और प्रक्रिया को पूरा करने:
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