SQL Server 2008 में स्ट्रिंग से सभी रिक्त स्थान को निकालने का सबसे अच्छा तरीका क्या है?
LTRIM(RTRIM(' a b '))
स्ट्रिंग के दाएं और बाएं सभी रिक्त स्थान हटा देगा, लेकिन मुझे बीच में स्थान हटाने की भी आवश्यकता है।
SQL Server 2008 में स्ट्रिंग से सभी रिक्त स्थान को निकालने का सबसे अच्छा तरीका क्या है?
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
कॉलम से सभी न्यूलाइन्स और स्पेस को हटाने के लिए उपयोग करना था । अगर मैंने char (13) और char (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, ' ', '');
यदि आपको सभी कॉलमों में TRIM रिक्त स्थान की आवश्यकता है, तो आप इस स्क्रिप्ट का उपयोग गतिशील रूप से करने के लिए कर सकते हैं:
--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
उपरोक्त सभी उत्तरों को पूर्ण बनाने के लिए, सभी व्हाट्सएप पात्रों से निपटने के लिए StackOverflow पर अतिरिक्त पोस्ट हैं ( इन वर्णों की पूरी सूची के लिए https://en.wikipedia.org/wiki/Whitespace_character देखें ):
जगह (की जगह (स्तंभ, CHAR (13), ''), CHAR (10), '')
मैं इस मुद्दे को आज था और बदलें / ट्रिम कर दिया था नीचे।
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"))
किसी विशिष्ट वर्ण को बदलने के लिए सिंटैक्स:
REPLACE ( string_expression , string_pattern , string_replacement )
उदाहरण के लिए स्ट्रिंग में "HelloReplaceThingsGoing" प्रतिस्थापित शब्द को कैसे द्वारा प्रतिस्थापित किया गया है
SELECT REPLACE('HelloReplaceThingsGoing','Replace','How');
GO
एक कार्यात्मक संस्करण (udf) जो रिक्त स्थान, cr, lf, टैब या विन्यास को हटाता है।
select Common.ufn_RemoveWhitespace(' 234 asdf wefwef 3 x ', default) as S
परिणाम: '234asdfwefwef3x'
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
फिर मुझे यह परिणाम मिला: एमएसपी का परीक्षण करें
अगर किसी को मेरी जरूरत हो तो यहां पोस्ट करना।
चल रहा है: Microsoft SQL Server 2016 (SP2)
नीचे दी गई स्क्रिप्ट की जाँच करें और प्रयास करें (यूनिट टेस्टेड) -
--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 फ़ंक्शन के कई कॉल। लेकिन जब आपके पास किसी अज्ञात स्थान के साथ गतिशील आउटपुट होता है, तो यह काम नहीं करेगा। नियमित आधार पर इस समस्या से निपटने वाला कोई भी व्यक्ति जानता है कि REPLACE केवल एक ही स्थान को हटाएगा, सभी को नहीं, जैसा कि इसे करना चाहिए। और LTRIM और RTRIM में एक ही मुद्दा है। इसे Microsoft पर छोड़ दें। यहां एक नमूना आउटपुट है जो सभी 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
अब इसे एक कदम आगे ले जाएं और इसे अद्यतन या चयन कथन में उपयोग करें, इसे udf में बदलें।
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