এসকিউএল সার্ভার ২০০৮-এর স্ট্রিং থেকে সমস্ত স্থান ফাঁকা করার সর্বোত্তম উপায় কী?
LTRIM(RTRIM(' a b '))
স্ট্রিংয়ের ডান এবং বামে সমস্ত শূন্যস্থান সরিয়ে ফেলবে, তবে মাঝখানে ফাঁকা স্থানটিও সরিয়ে ফেলতে হবে।
এসকিউএল সার্ভার ২০০৮-এর স্ট্রিং থেকে সমস্ত স্থান ফাঁকা করার সর্বোত্তম উপায় কী?
LTRIM(RTRIM(' a b '))
স্ট্রিংয়ের ডান এবং বামে সমস্ত শূন্যস্থান সরিয়ে ফেলবে, তবে মাঝখানে ফাঁকা স্থানটিও সরিয়ে ফেলতে হবে।
উত্তর:
কেবল এটি প্রতিস্থাপন;
SELECT REPLACE(fld_or_variable, ' ', '')
সম্পাদনা:
কেবল স্পষ্ট করার জন্য; তার একটি বিশ্বব্যাপী প্রতিস্থাপন, সেখানে কোন প্রয়োজন নেই trim()
বা পারেন জন্য একাধিক স্পেস সম্পর্কে চিন্তা char
বা varchar
:
create table #t (
c char(8),
v varchar(8))
insert #t (c, v) values
('a a' , 'a a' ),
('a a ' , 'a a ' ),
(' a a' , ' a a' ),
(' a a ', ' a a ')
select
'"' + c + '"' [IN], '"' + replace(c, ' ', '') + '"' [OUT]
from #t
union all select
'"' + v + '"', '"' + replace(v, ' ', '') + '"'
from #t
ফলাফল
IN OUT
===================
"a a " "aa"
"a a " "aa"
" a a " "aa"
" a a " "aa"
"a a" "aa"
"a a " "aa"
" a a" "aa"
" a a " "aa"
REPLACE(field, ' ', '')
রেফারেন্স এই ব্লগ থেকে নেওয়া:
প্রথমে নমুনা সারণী এবং ডেটা তৈরি করুন:
CREATE TABLE tbl_RemoveExtraSpaces
(
Rno INT
,Name VARCHAR(100)
)
GO
INSERT INTO tbl_RemoveExtraSpaces VALUES (1,'I am Anvesh Patel')
INSERT INTO tbl_RemoveExtraSpaces VALUES (2,'Database Research and Development ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (3,'Database Administrator ')
INSERT INTO tbl_RemoveExtraSpaces VALUES (4,'Learning BIGDATA and NOSQL ')
GO
অতিরিক্ত স্থান ছাড়াই স্ট্রিং নির্বাচন করতে স্ক্রিপ্ট:
SELECT
[Rno]
,[Name] AS StringWithSpace
,LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([Name],CHAR(32),'()'),')(',''),'()',CHAR(32)))) AS StringWithoutSpace
FROM tbl_RemoveExtraSpaces
ফলাফল:
Rno StringWithSpace StringWithoutSpace
----------- ----------------------------------------- ---------------------------------------------
1 I am Anvesh Patel I am Anvesh Patel
2 Database Research and Development Database Research and Development
3 Database Administrator Database Administrator
4 Learning BIGDATA and NOSQL Learning BIGDATA and NOSQL
100% কাজ করছে
UPDATE table_name SET "column_name"=replace("column_name", ' ', ''); //Remove white space
UPDATE table_name SET "column_name"=replace("column_name", '\n', ''); //Remove newline
UPDATE table_name SET "column_name"=replace("column_name", '\t', ''); //Remove all tab
আপনি ব্যবহার করতে পারেন "column_name"
বাcolumn_name
ধন্যবাদ
সুব্রত
select replace(replace(replace(varcharColumn,char(13),''),char(10),''),' ','')
একটি varchar
কলাম থেকে সমস্ত নতুনলাইন এবং স্পেসগুলি সরাতে ব্যবহার করতে হয়েছিল । আমি যদি চরের (13) এবং চর (10) এর পরিবর্তে '\ n' এবং '\ r' ব্যবহার করি তবে এটি কার্যকর হয়নি।
t-sql http://msdn.microsoft.com/en-us/library/ms186862.aspx প্রতিস্থাপন করুন
প্রতিস্থাপন (ভাল, '', '')
যদি স্ট্রিংয়ে একাধিক সাদা স্পেস থাকে তবে প্রতিস্থাপনটি সঠিকভাবে কাজ নাও করতে পারে। তার জন্য, নিম্নলিখিত ফাংশনটি ব্যবহার করা উচিত।
CREATE FUNCTION RemoveAllSpaces
(
@InputStr varchar(8000)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @InputStr
while charindex(' ', @ResultStr) > 0
set @ResultStr = replace(@InputStr, ' ', '')
return @ResultStr
END
উদাহরণ:
select dbo.RemoveAllSpaces('aa aaa aa aa a')
আউটপুট:
aaaaaaaaaa
এটি স্ট্রিংগুলিতে ফাঁকা স্থান সরিয়ে দেওয়ার কৌশল করে:
UPDATE
tablename
SET
columnname = replace(columnname, ' ', '');
আপনার যদি সমস্ত কলামে স্পেস স্পেস প্রয়োজন হয়, আপনি এই স্ক্রিপ্টটি এটি গতিশীলভাবে করতে ব্যবহার করতে পারেন:
--Just change table name
declare @MyTable varchar(100)
set @MyTable = 'MyTable'
--temp table to get column names and a row id
select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable
declare @tri int
select @tri = count(*) from #tempcols
declare @i int
select @i = 0
declare @trimmer nvarchar(max)
declare @comma varchar(1)
set @comma = ', '
--Build Update query
select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET '
WHILE @i <= @tri
BEGIN
IF (@i = @tri)
BEGIN
set @comma = ''
END
SELECT @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'+@comma
FROM #tempcols
where id = @i
select @i = @i+1
END
--execute the entire query
EXEC sp_executesql @trimmer
drop table #tempcols
আপনি যদি স্ট্রিং থেকে শূন্যস্থান, - এবং অন্য পাঠ্য সরাতে চান তবে নিম্নলিখিত ব্যবহার করুন:
ধরুন আপনার টেবিলটিতে '718-378-4957' বা '7183784957' এর মতো আপনার একটি মোবাইল নম্বর রয়েছে এবং আপনি প্রতিস্থাপন করে মোবাইল নম্বর পেতে চান তবে নীচের পাঠ্যটি ব্যবহার করুন।
select replace(replace(replace(replace(MobileNo,'-',''),'(',''),')',''),' ','') from EmployeeContactNumber
ফলাফল: - 7183784957
উপরের সমস্ত উত্তর সম্পূর্ণ করার জন্য, সমস্ত সাদা স্থানের অক্ষরগুলি কীভাবে মোকাবেলা করতে হবে সে সম্পর্কে স্ট্যাকওভারফ্লোতে অতিরিক্ত পোস্ট রয়েছে ( এই অক্ষরের পুরো তালিকার জন্য https://en.wikedia.org/wiki/Whitespace_character দেখুন ):
প্রতিস্থাপন (রিপ্লেস (COLUMN_NAME, চর (13), ''), চর (10), '')
এটি আমার জন্য দরকারী:
CREATE FUNCTION dbo.TRIM(@String VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
RETURN LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,CHAR(10),'[]'),CHAR(13),'[]'),char(9),'[]'),CHAR(32),'[]'),'][',''),'[]',CHAR(32))));
END
GO
।
আমার আজ এই সমস্যাটি ছিল এবং নীচে দেখুন ট্রিকটি প্রতিস্থাপন / ছাঁটাই করুন।
update table_foo
set column_bar = REPLACE(LTRIM(RTRIM(column_bar)), ' ', '')
আগপাছ :
old-bad: column_bar | New-fixed: column_bar
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
' xyz ' | 'xyz'
LTRIM
& RTRIM
?
বাম এবং ডানদিকে একটি স্ট্রিংয়ের ফাঁকা স্থান সরাতে। মধ্যম ব্যবহারে স্থান অপসারণ করতে Replace
।
আপনি RTRIM()
ডান থেকে স্পেসগুলি অপসারণ করতে এবং LTRIM()
বাম থেকে ফাঁকা স্থানগুলি অপসারণ করতে ব্যবহার করতে পারেন তাই বাম এবং ডান স্পেসগুলি নিম্নরূপে সরানো হয়েছে:
SELECT * FROM table WHERE LTRIM(RTRIM(username)) = LTRIM(RTRIM("Bob alias baby"))
একটি ক্রিয়ামূলক সংস্করণ (udf) যা স্পেস, ক্র, এলএফ, ট্যাবগুলি বা কনফিগারযোগ্য মুছে ফেলে।
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
ফলাফল: '234 এসএসডিউইউফওয়েফ3 এক্স'
alter function Common.RemoveWhitespace
(
@pString nvarchar(max),
@pWhitespaceCharsOpt nvarchar(max) = null -- default: tab, lf, cr, space
)
returns nvarchar(max) as
/*--------------------------------------------------------------------------------------------------
Purpose: Compress whitespace
Example: select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as s
-- Result: 234asdfwefwef3x
Modified By Description
---------- ----------- --------------------------------------------------------------------
2018.07.24 crokusek Initial Version
--------------------------------------------------------------------------------------------------*/
begin
declare
@maxLen bigint = 1073741823, -- (2^31 - 1) / 2 (https://stackoverflow.com/a/4270085/538763)
@whitespaceChars nvarchar(30) = coalesce(
@pWhitespaceCharsOpt,
char(9) + char(10) + char(13) + char(32)); -- tab, lf, cr, space
declare
@whitespacePattern nvarchar(30) = '%[' + @whitespaceChars + ']%',
@nonWhitespacePattern nvarchar(30) = '%[^' + @whitespaceChars + ']%',
@previousString nvarchar(max) = '';
while (@pString != @previousString)
begin
set @previousString = @pString;
declare
@whiteIndex int = patindex(@whitespacePattern, @pString);
if (@whiteIndex > 0)
begin
declare
@whitespaceLength int = nullif(patindex(@nonWhitespacePattern, substring(@pString, @whiteIndex, @maxLen)), 0) - 1;
set @pString =
substring(@pString, 1, @whiteIndex - 1) +
iif(@whiteSpaceLength > 0, substring(@pString, @whiteIndex + @whiteSpaceLength, @maxLen), '');
end
end
return @pString;
end
go
কিছু কারণে প্রতিস্থাপনটি প্রতিবার কেবল একটি স্ট্রিং দিয়ে কাজ করে। আমার এই " টেস্ট এমএসপি'র মতো স্ট্রিং ছিল " এর এবং আমি কেবল একটি স্থান রেখে যেতে চাই।
@ ফারহান যে পদ্ধতিটি ব্যবহার করেছিলেন আমি তা ব্যবহার করেছি, তবে কিছু পরিবর্তন সহ:
CREATE FUNCTION ReplaceAll
(
@OriginalString varchar(8000),
@StringToRemove varchar(20),
@StringToPutInPlace varchar(20)
)
RETURNS varchar(8000)
AS
BEGIN
declare @ResultStr varchar(8000)
set @ResultStr = @OriginalString
while charindex(@StringToRemove, @ResultStr) > 0
set @ResultStr = replace(@ResultStr, @StringToRemove, @StringToPutInPlace)
return @ResultStr
END
তারপরে আমি আমার আপডেটটি এভাবে চালাই
UPDATE tbTest SET Description = dbo.ReplaceAll(Description, ' ', ' ') WHERE ID = 14225
তারপরে আমি এই ফলাফল পেয়েছি: টেস্ট এমএসপি
আমার মতো যদি কারওর প্রয়োজন হয় তবে এখানে পোস্ট করা।
চলছে: মাইক্রোসফ্ট এসকিউএল সার্ভার 2016 (এসপি 2)
নীচের স্ক্রিপ্টটি পরীক্ষা করে দেখুন (ইউনিট পরীক্ষিত) -
--Declaring
DECLARE @Tbl TABLE(col_1 VARCHAR(100));
--Test Samples
INSERT INTO @Tbl (col_1)
VALUES
(' EY y
Salem')
, (' EY P ort Chennai ')
, (' EY Old Park ')
, (' EY ')
, (' EY ')
,(''),(null),('d
f');
SELECT col_1 AS INPUT,
LTRIM(RTRIM(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(col_1,CHAR(10),' ')
,CHAR(11),' ')
,CHAR(12),' ')
,CHAR(13),' ')
,CHAR(14),' ')
,CHAR(160),' ')
,CHAR(13)+CHAR(10),' ')
,CHAR(9),' ')
,' ',CHAR(17)+CHAR(18))
,CHAR(18)+CHAR(17),'')
,CHAR(17)+CHAR(18),' ')
)) AS [OUTPUT]
FROM @Tbl;
দেখে মনে হচ্ছে যে প্রত্যেকে একক REPLACE ফাংশন উল্লেখ করে চলেছে। এমনকি একটি রিপ্লেস ফাংশনের অনেকগুলি কল। কিন্তু যখন আপনার অজানা সংখ্যক স্পেস দিয়ে ডায়নামিক আউটপুট থাকে, তখন এটি কাজ করবে না। এই সমস্যাটির নিয়মিত ভিত্তিতে যে কেউ লেনদেন করে যে জানে যে প্রতিস্থাপনটি কেবল একটি স্থানই সরিয়ে ফেলবে, সমস্ত কিছু নয়, যেমনটি করা উচিত। এবং এলটিআরআইএম এবং আরটিআরআইএম একই সমস্যা বলে মনে হচ্ছে। মাইক্রোসফ্ট এ ছেড়ে দিন। এখানে একটি নমুনা আউটপুট যা সমস্ত CHAR (32) মান (স্পেস) অপসারণের জন্য WHILE লুপ ব্যবহার করে।
DECLARE @INPUT_VAL VARCHAR(8000)
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @INPUT_VAL = ' C A '
SET @OUTPUT_VAL = @INPUT_VAL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
PRINT 'START:' + @INPUT_VAL + ':END'
PRINT 'START:' + @OUTPUT_VAL + ':END'
উপরের কোডটির আউটপুট এখানে দেওয়া হল:
START: C A :END
START:CA:END
এখন এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে এবং আপডেট বা নির্বাচনী বিবৃতিতে এটি ব্যবহার করতে, এটি একটি ইউডিএফ-তে পরিবর্তন করুন।
CREATE FUNCTION udf_RemoveSpaces (@INPUT_VAL VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @OUTPUT_VAL VARCHAR(8000)
SET @OUTPUT_VAL = @INPUT_VAL
-- ITTERATE THROUGH STRING TO LOOK FOR THE ASCII VALUE OF SPACE (CHAR(32)) REPLACE IT WITH BLANK, NOT NULL
WHILE CHARINDEX(CHAR(32), @OUTPUT_VAL) > 0 BEGIN
SET @OUTPUT_VAL = REPLACE(@INPUT_VAL, CHAR(32), '')
END
RETURN @OUTPUT_VAL
END
তারপরে একটি নির্বাচন বা INSERT বিবৃতিতে ফাংশনটি ব্যবহার করুন:
UPDATE A
SET STATUS_REASON_CODE = WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE
INSERT INTO SOMETABLE
(STATUS_REASON_CODE)
SELECT WHATEVER.dbo.udf_RemoveSpaces(STATUS_REASON_CODE)
FROM WHATEVER..ACCT_INFO A
WHERE A.SOMEVALUE = @SOMEVALUE