উত্তর:
আসলে একটি এসকিউএল কমান্ড বা স্ক্রিপ্ট স্ট্রিংয়ের একটি নতুন লাইন সিআর, এলএফ বা সিআর + এলএফ যে কোনও হতে পারে। এগুলি সব পেতে আপনার এই জাতীয় কিছু দরকার:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
পরিবর্তে ব্যবহার করে পালাতে পারেন।
REPLACE(@string, CHAR(13) + CHAR(10), '')
আমি পার্টিতে একবছর দেরীতে হতে পারি, তবে আমি প্রতিদিন ক্যোয়ারী এবং এমএস-এসকিউএল নিয়ে কাজ করি এবং আমি এলটিআরআইএম () এবং আরটিআরআইএম () এবং সর্বদা তাদের একসাথে ডাকতে বাধ্য করেছি) এবং শেষদিকে নতুন লাইনে থাকা 'নোংরা' ডেটা না ধরা, তাই আমি স্থির করেছি যে আরও ভাল ট্রিম ফাংশন বাস্তবায়নের জন্য এটি উপযুক্ত সময়। আমি পিয়ার প্রতিক্রিয়া স্বাগত জানাই!
দাবি পরিত্যাগী : এই আসলে সরিয়ে ফেলা হবে , (একটি একক সাদা ব্যবধান দিয়ে প্রতিস্থাপন করে) হোয়াইটস্পেস বর্ধিত রূপ (ট্যাব, লাইন-ফিড, ঘোড়ার গাড়ি রিটার্ন, ইত্যাদি) তাই এটা আমার মূল উত্তর থেকে হিসাবে "CleanAndTrim" এ পুনরায় নামকরণ করা হয়েছে। এখানে ধারণাটি হ'ল আপনার স্ট্রিংটির অভ্যন্তরে এ জাতীয় অতিরিক্ত বিশেষ সাদা বর্ণের অক্ষরগুলির প্রয়োজন নেই এবং তাই যদি এটি মাথা / লেজে না আসে তবে সেগুলি একটি স্পেন স্পেস দিয়ে প্রতিস্থাপন করা উচিত। যদি আপনি উদ্দেশ্যযুক্তভাবে আপনার স্ট্রিংয়ে এই জাতীয় অক্ষরগুলি সঞ্চয় করেন (বলুন, আপনার ডেটা কলামে যে আপনি এটি চালাচ্ছেন), এটি করবেন না! এই ফাংশনটি উন্নত করুন বা আপনার নিজের লিখুন যা আক্ষরিকভাবে কেবল এই অক্ষরগুলি স্ট্রিংয়ের শেষ পয়েন্টগুলি থেকে সরিয়ে দেয়, 'বডি' থেকে নয়।
ঠিক আছে, এখন অস্বীকৃতি আপডেট করা হয়েছে, এখানে কোড's
-- =============================================
-- Description: TRIMs a string 'for real' - removes standard whitespace from ends,
-- and replaces ASCII-char's 9-13, which are tab, line-feed, vert tab,
-- form-feed, & carriage-return (respectively), with a whitespace
-- (and then trims that off if it's still at the beginning or end, of course).
-- =============================================
CREATE FUNCTION [fn_CleanAndTrim] (
@Str nvarchar(max)
)
RETURNS nvarchar(max) AS
BEGIN
DECLARE @Result nvarchar(max)
SET @Result = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
LTRIM(RTRIM(@Str)), CHAR(9), ' '), CHAR(10), ' '), CHAR(11), ' '), CHAR(12), ' '), CHAR(13), ' ')))
RETURN @Result
END
চিয়ার্স!
অন্য অস্বীকৃতি : আপনার সাধারণ উইন্ডোজ লাইন ব্রেকটি সিআর + এলএফ, তাই যদি আপনার স্ট্রিংটিতে সেগুলি থাকে তবে আপনি তাদের "ডাবল" স্পেস দিয়ে প্রতিস্থাপন করে শেষ করতে পারেন।
আপডেট, ২০১ :: একটি নতুন সংস্করণ যা আপনাকে সেই বিশেষ-সাদা-বর্ণচিহ্নগুলি আপনার পছন্দের অন্যান্য চরিত্রেরসাথে প্রতিস্থাপনের বিকল্প দেয়! এটিতে উইন্ডোজ সিআর + এলএফ জুটির জন্য ভাষ্য এবং কাজের আশ্রয়ও অন্তর্ভুক্ত রয়েছে, অর্থাত্ সেই নির্দিষ্ট চর-জোড়াকে একক প্রতিস্থাপনের সাথে প্রতিস্থাপন করে।
IF OBJECT_ID('dbo.fn_CleanAndTrim') IS NULL
EXEC ('CREATE FUNCTION dbo.fn_CleanAndTrim () RETURNS INT AS BEGIN RETURN 0 END')
GO
-- =============================================
-- Author: Nate Johnson
-- Source: http://stackoverflow.com/posts/24068265
-- Description: TRIMs a string 'for real' - removes standard whitespace from ends,
-- and replaces ASCII-char's 9-13, which are tab, line-feed, vert tab, form-feed,
-- & carriage-return (respectively), with a whitespace or specified character(s).
-- Option "@PurgeReplaceCharsAtEnds" determines whether or not to remove extra head/tail
-- replacement-chars from the string after doing the initial replacements.
-- This is only truly useful if you're replacing the special-chars with something
-- **OTHER** than a space, because plain LTRIM/RTRIM will have already removed those.
-- =============================================
ALTER FUNCTION dbo.[fn_CleanAndTrim] (
@Str NVARCHAR(MAX)
, @ReplaceTabWith NVARCHAR(5) = ' '
, @ReplaceNewlineWith NVARCHAR(5) = ' '
, @PurgeReplaceCharsAtEnds BIT = 1
)
RETURNS NVARCHAR(MAX) AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
--The main work (trim & initial replacements)
SET @Result = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
LTRIM(RTRIM(@Str)) --Basic trim
, NCHAR(9), @ReplaceTabWith), NCHAR(11), @ReplaceTabWith) --Replace tab & vertical-tab
, (NCHAR(13) + NCHAR(10)), @ReplaceNewlineWith) --Replace "Windows" linebreak (CR+LF)
, NCHAR(10), @ReplaceNewlineWith), NCHAR(12), @ReplaceNewlineWith), NCHAR(13), @ReplaceNewlineWith))) --Replace other newlines
--If asked to trim replacement-char's from the ends & they're not both whitespaces
IF (@PurgeReplaceCharsAtEnds = 1 AND NOT (@ReplaceTabWith = N' ' AND @ReplaceNewlineWith = N' '))
BEGIN
--Purge from head of string (beginning)
WHILE (LEFT(@Result, DATALENGTH(@ReplaceTabWith)/2) = @ReplaceTabWith)
SET @Result = SUBSTRING(@Result, DATALENGTH(@ReplaceTabWith)/2 + 1, DATALENGTH(@Result)/2)
WHILE (LEFT(@Result, DATALENGTH(@ReplaceNewlineWith)/2) = @ReplaceNewlineWith)
SET @Result = SUBSTRING(@Result, DATALENGTH(@ReplaceNewlineWith)/2 + 1, DATALENGTH(@Result)/2)
--Purge from tail of string (end)
WHILE (RIGHT(@Result, DATALENGTH(@ReplaceTabWith)/2) = @ReplaceTabWith)
SET @Result = SUBSTRING(@Result, 1, DATALENGTH(@Result)/2 - DATALENGTH(@ReplaceTabWith)/2)
WHILE (RIGHT(@Result, DATALENGTH(@ReplaceNewlineWith)/2) = @ReplaceNewlineWith)
SET @Result = SUBSTRING(@Result, 1, DATALENGTH(@Result)/2 - DATALENGTH(@ReplaceNewlineWith)/2)
END
RETURN @Result
END
GO
টি-এসকিউএল-এ নিউলাইনটি CHAR (13) এবং CHAR (10) (ক্যারেজ রিটার্ন + লাইন ফিড) দ্বারা প্রতিনিধিত্ব করা হয়। তদনুসারে, আপনি যে পাঠ্যটির সাহায্যে নিউলাইনটি প্রতিস্থাপন করতে চান তা দিয়ে একটি প্রতিস্থাপন বিবৃতি তৈরি করতে পারেন।
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
বেশিরভাগ লোকেরা যা চান তা করতে, এমন একটি স্থানধারক তৈরি করুন যা প্রকৃত লাইন ব্রেকিং চরিত্র নয়। তারপরে আপনি আসলে এর জন্য পদ্ধতির সমন্বয় করতে পারেন:
REPLACE(REPLACE(REPLACE(MyField, CHAR(13) + CHAR(10), 'something else'), CHAR(13), 'something else'), CHAR(10), 'something else')
এইভাবে আপনি কেবল একবার প্রতিস্থাপন করুন। এর পদ্ধতির:
REPLACE(REPLACE(MyField, CHAR(13), ''), CHAR(10), '')
আপনি কেবলমাত্র সিআরএলএফ অক্ষরগুলি থেকে মুক্তি পেতে চাইলে দুর্দান্ত কাজ করে তবে আপনি যদি কোনও স্থানধারক যেমন
কিছু বা কিছু চান তবে প্রথম পদ্ধতির বিষয়টি আরও কিছুটা সঠিক more
যদি আপনার কলামের ডেটা টাইপ ' পাঠ্য ' হয় তবে আপনি ত্রুটি বার্তা পাবেন
Msg 8116, স্তর 16, রাজ্য 1, লাইন 2 আর্গুমেন্ট তথ্য প্রকারের পাঠ্যটি প্রতিস্থাপন ফাংশনের 1 টি আর্গুমেন্টের জন্য অবৈধ।
এই ক্ষেত্রে আপনাকে পাঠটিকে nvarchar হিসাবে কাস্ট করতে হবে এবং তারপরে প্রতিস্থাপন করতে হবে
SELECT REPLACE(REPLACE(cast(@str as nvarchar(max)), CHAR(13), ''), CHAR(10), '')
আপনার যদি এমন কোনও সমস্যা থাকে যেখানে আপনি কেবল অনুসরণের অক্ষরগুলি সরাতে চান তবে আপনি এটি চেষ্টা করতে পারেন:
WHILE EXISTS
(SELECT * FROM @ReportSet WHERE
ASCII(right(addr_3,1)) = 10
OR ASCII(right(addr_3,1)) = 13
OR ASCII(right(addr_3,1)) = 32)
BEGIN
UPDATE @ReportSet
SET addr_3 = LEFT(addr_3,LEN(addr_3)-1)
WHERE
ASCII(right(addr_3,1)) = 10
OR ASCII(right(addr_3,1)) = 13
OR ASCII(right(addr_3,1)) = 32
END
এটি এমন ঠিকানাগুলির সাথে আমার একটি সমস্যার সমাধান করেছে যেখানে একটি পদ্ধতি একটি নির্দিষ্ট সংখ্যক লাইনের ক্ষেত্র তৈরি করেছিল, এমনকি সেই লাইনগুলি খালি থাকলেও। আমার এসএসআরএস প্রতিবেদনে স্থান বাঁচাতে আমি সেগুলি কেটে ফেলেছি।
আপনার যদি sp_helptext ব্যবহারের সাথে খোলার পদ্ধতি থাকে তবে কেবলমাত্র সমস্ত এসএলএল কোয়েরিতে সমস্ত পাঠ্য অনুলিপি করুন এবং সিটিআরএল + এইচ বোতামটি টিপুন নিয়মিত এক্সপ্রেশনটি ব্যবহার করে প্রতিস্থাপন করুন এবং খালি দিয়ে সন্ধান ক্ষেত্রটি প্রতিস্থাপন করুন put। N। আরও বিশদ চিত্র পরীক্ষা করুন। এখানে চিত্র বর্ণনা লিখুন
@Cerebrus সমাধানের জন্য: "+" স্ট্রিংয়ের জন্য H2 সমর্থনযোগ্য নয়। তাই:
REPLACE(string, CHAR(13) || CHAR(10), 'replacementString')
উপরে / পূর্বে পোস্ট করা উত্তরটি CHAR (13) CHAR (10) গাড়ীর রিটার্ন প্রতিস্থাপনের জন্য রিপোর্ট করা হয়েছিল:
REPLACE(REPLACE(REPLACE(MyField, CHAR(13) + CHAR(10), 'something else'), CHAR(13), 'something else'), CHAR(10), 'something else')
কোডটির REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
অংশটি কখনই পাবেন না এবং এর অবাঞ্ছিত ফলাফলটি ফিরিয়ে দেবেন:
'something else''something else'
এবং একটি একক এর কাঙ্ক্ষিত ফলাফল নয়:
'something else'
এর জন্য REPLACE স্ক্রিপ্টটি আবার লিখতে হবে:
REPLACE(REPLACE(REPLACE(MyField, CHAR(10), 'something else'), CHAR(13), 'something else'), CHAR(13) + CHAR(10), 'something else')
যেহেতু প্রবাহটি প্রথম 1 ম / সর্বাপেক্ষা বাম রিপ্লেস বিবৃতি পরীক্ষা করে, ব্যর্থতার পরে পরবর্তী প্রতিস্থাপনের বিবৃতিটি পরীক্ষা করা অবিরত থাকবে।