Microsoft SQL Server
STUFF फ़ंक्शन
खोज…
पैरामीटर
पैरामीटर | विवरण |
---|---|
character_expression | आपके डेटा में मौजूदा स्ट्रिंग |
शुरुआत की स्थिति | length हटाने के लिए character_expression में स्थिति और उसके बाद replacement_string डालें |
लंबाई | से हटाने के लिए वर्णों की संख्या character_expression |
replacement_string | पात्रों के अनुक्रम में डालने के लिए character_expression |
मूल चरित्र प्रतिस्थापन के साथ STUFF ()
STUFF()
फ़ंक्शन निर्दिष्ट स्ट्रिंग को पहले वर्णों को हटाकर एक स्ट्रिंग को दूसरे स्ट्रिंग में सम्मिलित करता है। निम्न उदाहरण, "Svr" को हटाता है और इसे "सर्वर" से बदल देता है। यह प्रतिस्थापन के start_position
और length
को निर्दिष्ट करके होता है।
SELECT STUFF('SQL Svr Documentation', 5, 3, 'Server')
इस उदाहरण को निष्पादित करने से SQL Svr Documentation.
बजाय SQL Server Documentation
वापस आ जाएगा SQL Svr Documentation.
एक्सएमएल के लिए एकाधिक पंक्तियों से मूल्यों को सम्मिलित करने के लिए उपयोग करना
FOR XML
फ़ंक्शन के लिए एक सामान्य उपयोग कई पंक्तियों के मूल्यों को संक्षिप्त करना है।
यहां ग्राहक तालिका का उपयोग करके एक उदाहरण दिया गया है:
SELECT
STUFF( (SELECT ';' + Email
FROM Customers
where (Email is not null and Email <> '')
ORDER BY Email ASC
FOR XML PATH('')),
1, 1, '')
ऊपर दिए गए उदाहरण में, FOR XML PATH(''))
लिए ईमेल पते का उपयोग करने के लिए उपयोग किया जा रहा है ;
सीमांकक चरित्र के रूप में। इसके अलावा, STUFF
का उद्देश्य अग्रणी को हटाना है ;
उपजी स्ट्रिंग से। STUFF
भी STUFF
में XML से varchar करने के लिए संक्षिप्त स्ट्रिंग कास्टिंग है।
नोट: ऊपर के उदाहरण से परिणाम XML -एनकोडित किया जाएगा, जिसका अर्थ यह स्थान ले लेगा <
साथ पात्रों <
आदि यदि आप ऐसा नहीं चाहते हैं, तो FOR XML PATH(''))
FOR XML PATH, TYPE).value('.[1]','varchar(MAX)')
, उदा:
SELECT
STUFF( (SELECT ';' + Email
FROM Customers
where (Email is not null and Email <> '')
ORDER BY Email ASC
FOR XML PATH, TYPE).value('.[1]','varchar(900)'),
1, 1, '')
इसका उपयोग MySQL में GROUP_CONCAT
समान या PostgreSQL string_agg
में string_agg
समान परिणाम प्राप्त करने के लिए किया जा सकता है, हालांकि हम ग्रुप बाय एग्रीगेट के बजाय string_agg
का उपयोग करते हैं। (एक विकल्प के रूप में, आप एक उपयोगकर्ता-निर्धारित एग्रीगेट को इस तरह स्थापित कर सकते हैं जैसे कि अगर आप GROUP_CONCAT
करीब कार्यक्षमता की तलाश कर रहे हैं)।
कॉलम नामों को अल्पविराम से अलग करें (सूची नहीं)
/*
The result can be use for fast way to use columns on Insertion/Updates.
Works with tables and views.
Example: eTableColumns 'Customers'
ColumnNames
------------------------------------------------------
Id, FName, LName, Email, PhoneNumber, PreferredContact
INSERT INTO Customers (Id, FName, LName, Email, PhoneNumber, PreferredContact)
VALUES (5, 'Ringo', 'Star', '[email protected]', NULL, 'EMAIL')
*/
CREATE PROCEDURE eTableColumns (@Table VARCHAR(100))
AS
SELECT ColumnNames =
STUFF( (SELECT ', ' + c.name
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
WHERE
c.object_id = OBJECT_ID( @Table)
FOR XML PATH, TYPE).value('.[1]','varchar(2000)'),
1, 1, '')
GO
sql सर्वर में अल्पविराम के लिए सामान अलग
FOR XML PATH
और STUFF
लिए एक पंक्ति में कई पंक्तियों को STUFF
करने के लिए:
select distinct t1.id,
STUFF(
(SELECT ', ' + convert(varchar(10), t2.date, 120)
FROM yourtable t2
where t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '') AS date
from yourtable t1;
STUFF () फ़ंक्शन का मूल उदाहरण।
STUFF (ओरिजिनल_ एक्सप्रेशन, स्टार्ट, लेंथ, रिप्लेसमेंट_एक्सप्रेशन)
STUFF () फंक्शन आवेषण रिप्लेसमेंट_एक्स्पिरेशन, प्रारंभ में निर्दिष्ट स्थान पर, लंबाई पैरामीटर का उपयोग करके निर्दिष्ट वर्णों को हटाने के साथ।
Select FirstName, LastName,Email, STUFF(Email, 2, 3, '*****') as StuffedEmail From Employee
इस उदाहरण को निष्पादित करने के परिणामस्वरूप दी गई तालिका वापस आ जाएगी
पहला नाम | उपनाम | ईमेल | StuffedEmail |
---|---|---|---|
Jomes | शिकारी | [email protected] | J*****[email protected] |
श्याम | राठौड़ | [email protected] | S*****[email protected] |
राम | शिंदे | [email protected] | आर ***** hotmail.com |