এসকিউএল সার্ভার 2017 বা নতুনতর যে কেউ ব্যবহার করছেন For
আপনি ট্রিমটি অন্তর্নির্মিত ফাংশনটি ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:
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
কেবলমাত্র ফাঁকা স্থান সরিয়ে ফেলা হয়, তাই ট্যাবগুলি এবং নিউলাইনগুলি (সিআর + এলএফ) অপসারণ করার জন্য আপনাকে এই characters FROM
ধারাটি নির্দিষ্ট করতে হবে ।
এছাড়াও আমি ভেরিয়েবলের NCHAR(0x09)
ট্যাব অক্ষরগুলির জন্য ব্যবহার করেছি @Test
যাতে উদাহরণ কোডটি অনুলিপি করা যায় এবং সঠিক অক্ষরগুলি ধরে রাখা যায়। অন্যথায়, এই পৃষ্ঠাটি যখন রেন্ডার করা হয় তখন ট্যাবগুলি স্পেসে রূপান্তরিত হয়।
এসকিউএল সার্ভার 2016 বা তার বেশি বয়সী যে কারও জন্য
আপনি কোনও এসকিউএলসিআরআর স্কেলার ইউডিএফ বা একটি টি-এসকিউএল ইনলাইন টিভিএফ (আইটিভিএফ) হিসাবে একটি ফাংশন তৈরি করতে পারেন। টি-এসকিউএল ইনলাইন টিভিএফ নিম্নরূপ হবে:
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
শুরুতে উল্লিখিত হিসাবে, এটি এসকিউএলসিআরআর মাধ্যমেও সত্যই সহজ কারণ নেট। র মধ্যে এমন একটি Trim()
পদ্ধতি অন্তর্ভুক্ত রয়েছে যা আপনি যা চান তা ঠিক পরিচালনা করে। হয় আপনি কল করতে নিজের কোড SqlString.Value.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'~' + SQL#.String_Trim(@Test) + N'~' AS [proof];
এবং এটি আইটিএফএফ উদাহরণ আউটপুটে উপরে প্রদর্শিত ঠিক একই স্ট্রিংটি প্রদান করে। তবে স্কেলার ইউডিএফ হওয়ায় আপনি এটিতে নিম্নলিখিত হিসাবে এটি ব্যবহার করবেন UPDATE
:
UPDATE tbl
SET tbl.[Column] = SQL#.String_Trim(itvf.[Column])
FROM SchemaName.TableName tbl
উপরের যে কোনও একটি লক্ষ লক্ষ সারি জুড়ে ব্যবহারের জন্য দক্ষ হওয়া উচিত। মাল্টি-স্টেটমেন্ট টিভিএফ এবং টি-এসকিউএল স্কেলার ইউডিএফগুলির বিপরীতে ইনলাইন টিভিএফগুলি অপ্টিমাইজযোগ্য। এবং, এসকিউএলসিআরআর স্কেলার ইউডিএফগুলির মধ্যে সমান্তরাল পরিকল্পনাগুলি ব্যবহার করার সম্ভাবনা রয়েছে, যতক্ষণ না তারা চিহ্নিত করা IsDeterministic=true
হয় এবং যেকোন প্রকারের Read
ডেটা অ্যাক্সেস সেট না করে (ব্যবহারকারী এবং সিস্টেম ডেটা অ্যাক্সেস উভয়ের জন্য ডিফল্ট None
), এবং উভয় শর্তগুলি উপরে উল্লিখিত এসকিউএলসিআরআর উভয় কার্যক্রমে সত্য।
UPDATE
মতো একটি ক্যোয়ারিতে ব্যবহার করা হবে , যাতে কোনও ক্রিয়াকলাপ ছাঁটাই করতে অক্ষরের একটি তালিকা গ্রহণ করে with অনেক স্ক্রিপ্টিং ভাষা আছে।LTRIM
RTRIM
UPDATE table t SET t.column = TRIM(t.column, CONCAT(CHAR(9), CHAR(10), CHAR(13)))
TRIM( expression, charlist )