SQL Server 2017 या नए का उपयोग करने वाले किसी के लिए
आप TRIM बिल्ट-इन फ़ंक्शन का उपयोग कर सकते हैं । उदाहरण के लिए:
DECLARE @Test NVARCHAR(4000);
SET @Test = N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + N' this
' + NCHAR(0x09) + NCHAR(0x09) + N' content' + NCHAR(0x09) + NCHAR(0x09) + N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + NCHAR(0x09) + N' ';
SELECT N'~'
+ TRIM(NCHAR(0x09) + NCHAR(0x20) + NCHAR(0x0D) + NCHAR(0x0A) FROM @Test)
+ N'~';
कृपया ध्यान दें कि डिफ़ॉल्ट व्यवहार TRIM
केवल रिक्त स्थान को हटाने के लिए है, इसलिए टैब और newlines (CR + LFs) को निकालने के लिए, आपको characters FROM
क्लॉज़ निर्दिष्ट करने की आवश्यकता है ।
इसके अलावा, मैंने चर NCHAR(0x09)
वर्णों में टैब वर्णों के लिए उपयोग किया @Test
ताकि उदाहरण कोड को कॉपी-और-पेस्ट किया जा सके और सही वर्णों को बनाए रखा जा सके। अन्यथा, जब यह पृष्ठ प्रदान किया जाता है तो टैब रिक्त स्थान में परिवर्तित हो जाते हैं।
SQL सर्वर 2016 या पुराने का उपयोग करने वाले किसी के लिए
आप एक फ़ंक्शन बना सकते हैं, या तो SQLCLR स्केलर UDF या T-SQL इनलाइन TVF (iTVF) के रूप में। T-SQL इनलाइन TVF निम्नानुसार होगा:
CREATE
--ALTER
FUNCTION dbo.TrimChars(@OriginalString NVARCHAR(4000), @CharsToTrim NVARCHAR(50))
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN
WITH cte AS
(
SELECT PATINDEX(N'%[^' + @CharsToTrim + N']%', @OriginalString) AS [FirstChar],
PATINDEX(N'%[^' + @CharsToTrim + N']%', REVERSE(@OriginalString)) AS [LastChar],
LEN(@OriginalString + N'~') - 1 AS [ActualLength]
)
SELECT cte.[ActualLength],
[FirstChar],
((cte.[ActualLength] - [LastChar]) + 1) AS [LastChar],
SUBSTRING(@OriginalString, [FirstChar],
((cte.[ActualLength] - [LastChar]) - [FirstChar] + 2)) AS [FixedString]
FROM cte;
GO
और इसे निम्न प्रकार से चलाना:
DECLARE @Test NVARCHAR(4000);
SET @Test = N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + N' this
' + NCHAR(0x09) + NCHAR(0x09) + N' content' + NCHAR(0x09) + NCHAR(0x09) + N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + NCHAR(0x09) + N' ';
SELECT N'~' + tc.[FixedString] + N'~' AS [proof]
FROM dbo.TrimChars(@Test, NCHAR(0x09) + NCHAR(0x20) + NCHAR(0x0D) + NCHAR(0x0A)) tc;
यह दिखाता है:
proof
----
~this
content~
और तुम एक में उपयोग कर सकते हैं कि UPDATE
का उपयोग करते हुए CROSS APPLY
:
UPDATE tbl
SET tbl.[Column] = itvf.[FixedString]
FROM SchemaName.TableName tbl
CROSS APPLY dbo.TrimChars(tbl.[Column],
NCHAR(0x09) + NCHAR(0x20) + NCHAR(0x0D) + NCHAR(0x0A)) itvf
जैसा कि शुरुआत में उल्लेख किया गया है, यह वास्तव में SQLCLR के माध्यम से भी आसान है क्योंकि .NET में एक Trim()
विधि शामिल है जो ठीक उसी प्रकार से होती है जो आप चाहते हैं। आप या तो कॉल करने के लिए अपना खुद का कोड कर सकते हैं SqlString.Value.Trim()
, या आप बस SQL # लाइब्रेरी के नि: शुल्क संस्करण को स्थापित कर सकते हैं (जो मैंने बनाया था, लेकिन यह फ़ंक्शन नि: शुल्क संस्करण में है) और या तो String_Trim का उपयोग करें (जो कि केवल सफेद स्थान करता है) या String_TrimCs कहाँ आप पात्रों को दोनों तरफ से ट्रिम करने के लिए पास करते हैं (ठीक ऊपर दिखाए गए iTVF की तरह)।
DECLARE @Test NVARCHAR(4000);
SET @Test = N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + N' this
' + NCHAR(0x09) + NCHAR(0x09) + N' content' + NCHAR(0x09) + NCHAR(0x09) + N'
' + NCHAR(0x09) + N' ' + NCHAR(0x09) + NCHAR(0x09) + N' ';
SELECT N'~' + SQL#.String_Trim(@Test) + N'~' AS [proof];
और यह ठीक उसी स्ट्रिंग को वापस करता है जैसा कि iTVF उदाहरण आउटपुट में ऊपर दिखाया गया है। लेकिन एक स्केल UDF होने के नाते, आप इसे निम्नानुसार उपयोग करेंगे UPDATE
:
UPDATE tbl
SET tbl.[Column] = SQL#.String_Trim(itvf.[Column])
FROM SchemaName.TableName tbl
लाखों पंक्तियों का उपयोग करने के लिए उपरोक्त में से कोई एक कुशल होना चाहिए। इनलाइन TVFs मल्टी स्टेटमेंट TVFs और T-SQL स्केलर UDFs के विपरीत हैं। और, SQLCLR स्केलर UDFs को समानांतर योजनाओं में उपयोग किए जाने की क्षमता है, जब तक वे चिह्नित हैं IsDeterministic=true
और या तो डेटाअटे टाइप नहीं करते हैं Read
(उपयोगकर्ता और सिस्टम डेटा एक्सेस दोनों के लिए डिफ़ॉल्ट है None
), और दोनों ही स्थितियां हैं ऊपर उल्लिखित दोनों SQLCLR फ़ंक्शन के लिए सही है।
UPDATE
जैसेLTRIM
/RTRIM
,UPDATE table t SET t.column = TRIM(t.column, CONCAT(CHAR(9), CHAR(10), CHAR(13)))
किसीTRIM( expression, charlist )
फ़ंक्शन की पंक्तियों की सूची को स्वीकार करने वाले फ़ंक्शन की पंक्तियों में कुछ को ट्रिम करने के लिए कई स्क्रिप्टिंग भाषाओं की तरह।