मैं SQL फ़ंक्शन में एक नौसिखिया हूं। SQL सर्वर में फैक्टरियल के लिए फ़ंक्शन बनाने का सबसे अच्छा तरीका क्या है- 10 कहें!एसक्यूएल फ़ंक्शंस - फैक्टोरियल
उत्तर
यहाँ एक पुनरावर्ती समाधान है:,
CREATE FUNCTION dbo.Factorial (@iNumber int)
RETURNS INT
AS
BEGIN
DECLARE @i int
IF @iNumber <= 1
SET @i = 1
ELSE
SET @i = @iNumber * dbo.Factorial(@iNumber - 1)
RETURN (@i)
END
मिला है, मुझे लगता है कि यहां 'बिगिनट' का उपयोग करना एक सुधार होगा –
एक गैर पुनरावर्ती रास्ता
;With Nums As
(
select ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS RN
FROM sys.objects
)
SELECT POWER(10.0, SUM(LOG10(RN)))
FROM Nums
WHERE RN <= 10
और एक पुनरावर्ती रास्ता
declare @target int
set @target=10;
WITH N AS
(SELECT 1 AS i,
1 AS f
UNION ALL
SELECT i+1,
f*(i+1)
FROM N
WHERE i < @target
)
SELECT f FROM N
WHERE [email protected]
मैं जानता हूँ कि मैं देर से यहाँ एक छोटे से कर रहा हूँ, लेकिन यह ध्यान देने योग्य है कि मार्टिन द्वारा पोस्ट किया गया रिकर्सिव तरीका 0
के लिए काम नहीं करता हैdeclare @target int=3;
WITH N AS
(SELECT 1 AS i,
1 AS f
UNION ALL
SELECT i+1,
f*(i+1)
FROM N
WHERE i < @target),
N0 AS
(SELECT f FROM N WHERE [email protected] UNION SELECT 0)
SELECT MAX(f) FROM N0
और जिस तरह के लिए, जिस तरह से तेजी से संस्करण:
यह होगा (मुझे माफ कर दो, मैं कोड पोस्टिंग मुद्दों कर रहा था)
declare @target int=5;
WITH N AS
(SELECT 1 AS i,
1 AS f
UNION ALL
SELECT i+1,
f*(i+1)
FROM N
WHERE i < @target),
N0 AS
(SELECT f FROM N WHERE [email protected] UNION SELECT f=CASE WHEN @target=0 THEN 0 END)
SELECT f FROM N0
WHERE f>=0
यह बहुत तेजी से है, क्योंकि मैं MAX() फ़ंक्शन को खो दें, जो शीर्ष 1 की तरह है, एक DISTINCT प्रकार का कारण बनता है।
... मेरे सेट आधारित पद्धति के लिए:
DECLARE @n int=11, @f bigint=1;
WITH
t(n,f) AS (SELECT TOP(@n)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL))+1,
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) *
(ROW_NUMBER() OVER (ORDER BY (SELECT NULL))+1)
FROM sys.all_columns
UNION SELECT 1, f=CASE WHEN @n=0 THEN 0 ELSE 1 END)
SELECT @[email protected]*f
FROM t
WHERE n%[email protected]%2 OR f=0;
SELECT @f AS FACTORIAL;
- Iterative विधि। - क्यों Iterative? यह सरल और तेज़ है। - 0 से 20 तक @N के लिए यह एक सटीक परिणाम देता है। - 21 एक अतिप्रवाह देगा।
DECLARE @N Bigint = 20
DECLARE @F Bigint = 1
WHILE @N > 0 BEGIN
SET @F = @f*@n
SET @N = @N-1
END
SELECT @F AS FACTORIAL
- डेटाप्रकार फ्लोट करने के लिए परिवर्तित करें और आप के लिए 170. भाज्य प्राप्त कर सकते हैं - 171 एक अतिप्रवाह का परिणाम देगा। - परिणाम को सीमित करें केवल सीमित संख्या में स्थितियों पर सटीक होगा।
DECLARE @N FLOAT = 170
DECLARE @F FLOAT = 1
WHILE @N > 0 BEGIN
SET @F = @f*@n
SET @N = @N-1
END
SELECT @F AS FACTORIAL
- बेन
इस
WITH MYCTE AS(
SELECT VAL=1,NUM =6
UNION ALL
SELECT VAL=VAL*NUM,NUM = (NUM -1)
FROM MYCTE
WHERE NUM > 1
)
SELECT VAL FROM MYCTE
यहाँ की कोशिश करो calculate factorial value of an integer in SQL Server
create function sqlFactorial (@int int)
returns int
begin
declare @factorial bigint = 1
select @factorial = @factorial * i from dbo.NumbersTable(1,@int,1)
return @factorial
end
आप इस समाधान के लिए एक SQL numbers table उपयोग करने की आवश्यकता के लिए एक अन्य तरीका है। चयन कथन प्रत्येक भाग के लिए घोषित पूर्णांक चर अद्यतन करता है जिसमें इसे क्रमिक पूर्णांक मान
यदि आप अनुमान के साथ ठीक हैं, तो Stirling's Approximation का उपयोग करें।
create table #temp (value int)
insert into #temp values (5),(6),(7),(8)
select
value,
sqrt(2*3.14*value)*power((value/2.718),value) --stirling's approx.
from #temp
ध्यान दें कि यदि आवश्यक हो तो आपको 0 के लिए केस बनाना होगा।
यदि @ जेसन का शाब्दिक अर्थ है उपयोगकर्ता द्वारा परिभाषित एसक्यूएल-सर्वर में फ़ंक्शन, आप किसी तालिका चर के अलावा फ़ंक्शन के अंदर एक तालिका को परिभाषित नहीं कर सकते हैं। http://stackoverflow.com/questions/11267804/create-drop-and-insert-a-temp-table-in-a-user-defined-function – Jake
- 1. फैक्टोरियल
- 2. एसक्यूएल फ़ंक्शंस ट्रिगर
- 3. ज्ञापन, पुनरावर्ती फैक्टोरियल समारोह?
- 4. रिकर्सिव फैक्टोरियल प्रोग्राम की जटिलता
- 5. जावा में रिकर्सन का उपयोग कर फैक्टोरियल
- 6. कस्टम एसक्यूएल फ़ंक्शंस और कोड फर्स्ट (ईएफ 4.1)
- 7. एसटीएल फ़ंक्शंस
- 8. std :: फ़ंक्शंस
- 9. इनलाइन फ़ंक्शंस
- 10. $ .extend() फ़ंक्शंस
- 11. कोडइग्निटर के सक्रिय रिकॉर्ड फ़ंक्शंस
- 12. क्यों पाइथन गणित। फैक्टोरियल (एक्स) बहुत तेज़ है?
- 13. कोडेकफ अभ्यास प्रश्न सहायता की आवश्यकता है - एक फैक्टोरियल
- 14. आर में एक आंशिक फैक्टोरियल डिजाइन कैसे बनाएं?
- 15. कौन सा कार्य तेजी से, घातीय या फैक्टोरियल बढ़ता है?
- 16. एसक्यूएल
- 17. पीडीओ बनाम पीजी_ * फ़ंक्शंस
- 18. रिकर्सिव फ़ंक्शंस और सूचियां
- 19. एक्सएसएलटी फ़ंक्शंस और नेमस्पेस
- 20. नेस्टेड फ़ंक्शंस जावास्क्रिप्ट
- 21. सी ++ नेमस्पेस फ़ंक्शंस
- 22. ओवरलोडेड फ़ंक्शंस व्युत्पन्न कक्षा
- 23. कॉलबैक फ़ंक्शंस पर टिप्पणी
- 24. एंड्रॉइड यूएसबी फ़ंक्शंस?
- 25. टर्नरी ऑपरेटर लैम्ब्डा फ़ंक्शंस
- 26. जावा में फ़ंक्शंस फ़ंक्शन?
- 27. उपयोगकर्ता परिभाषित सीएमपी फ़ंक्शंस
- 28. PHP फ़ंक्शंस और @ फ़ंक्शन
- 29. जावास्क्रिप्ट फ़ंक्शंस और ऑब्जेक्ट्स
- 30. सी ++: सदस्य फ़ंक्शंस
क्या इसे वास्तव में एसक्यूएल होने की आवश्यकता है? मुझे लगता है कि वहाँ अन्य बेहतर विकल्पों का एक टन होगा। –
प्रतिक्रिया के लिए धन्यवाद हाँ, यह एसक्यूएल होना चाहिए।मैं SQL सर्वर पर फ़ंक्शंस सीख रहा हूं, यह कोई होमवर्क नहीं है, मैं एक फ़ंक्शन नमूना पेपर को हल करके स्वयं अभ्यास कर रहा हूं, मुझे ऑनलाइन – Jason