2017-11-03 1 views
-1

Ich bin neu in T-SQL. Ich brauche deine Hilfe, um zusätzliche Zeichen aus einer Zeichenfolge oder Zeilen aus einer Spalte zu entfernen, die ich nach dem Pivotieren extrahiere.Wie lösche Extra-Zeichen aus einer Zeichenfolge in SQL?

Zeichenfolge sieht wie folgt aus: ?<span style="color:rgb background color then actual string. Ich möchte diese zusätzlichen/Sonderzeichen beim Extrahieren der Daten entfernen.

Ich konnte nur am Anfang oder Ende des Strings zu entfernen/ersetzen finden, aber nicht sicher, wie der obigen Charakters aus dem String

+1

Gibt es einen Grund, warum Sie die Funktion REPLACE() nicht verwenden können? –

+3

'String sieht wie folgt aus:?' <= Ist die Frage nicht abgeschlossen oder ist die Zeichenfolge ein literales Fragezeichen? – Igor

+3

Was sind die "Extra/Sonderzeichen"? Vielleicht könntest du dein vorher und nachher teilen – JNevill

Antwort

0

Schnappen

Dank entfernen Kopie patexclude8K

CREATE FUNCTION dbo.PatExclude8K 
(
    @String VARCHAR(8000), 
    @Pattern VARCHAR(50) 
) 
/******************************************************************************* 
Purpose: 
Given a string (@String) and a pattern (@Pattern) of characters to remove, 
remove the patterned characters from the string. 

Usage: 
--===== Basic Syntax Example 
SELECT CleanedString 
FROM dbo.PatExclude8K(@String,@Pattern); 

--===== Remove all but Alpha characters 
SELECT CleanedString 
FROM dbo.SomeTable st 
CROSS APPLY dbo.PatExclude8K(st.SomeString,'%[^A-Za-z]%'); 

--===== Remove all but Numeric digits 
SELECT CleanedString 
FROM dbo.SomeTable st 
CROSS APPLY dbo.PatExclude8K(st.SomeString,'%[^0-9]%'); 

Programmer Notes: 
1. @Pattern is not case sensitive (the function can be easily modified to make it so) 
2. There is no need to include the "%" before and/or after your pattern since since we 
    are evaluating each character individually 

Revision History: 
Rev 00 - 10/27/2014 Initial Development - Alan Burstein 

Rev 01 - 10/29/2014 Mar 2007 - Alan Burstein 
     - Redesigned based on the dbo.STRIP_NUM_EE by Eirikur Eiriksson 
      (see: http://www.sqlservercentral.com/Forums/Topic1585850-391-2.aspx) 
     - change how the cte tally table is created 
     - put the include/exclude logic in a CASE statement instead of a WHERE clause 
     - Added Latin1_General_BIN Colation 
     - Add code to use the pattern as a parameter. 

Rev 02 - 11/6/2014 
     - Added final performane enhancement (more cudo's to Eirikur Eiriksson) 
     - Put 0 = PATINDEX filter logic into the WHERE clause 

Rev 03 - 5/16/2015 
     - Updated code to deal with special XML characters 
*******************************************************************************/ 
RETURNS TABLE WITH SCHEMABINDING AS 
RETURN 
WITH 
E1(N) AS (SELECT N FROM (VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL)) AS X(N)), 
itally(N) AS 
(
    SELECT TOP(CONVERT(INT,LEN(@String),0)) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) 
    FROM E1 T1 CROSS JOIN E1 T2 CROSS JOIN E1 T3 CROSS JOIN E1 T4 
) 
SELECT NewString = 
((
    SELECT SUBSTRING(@String,N,1) 
    FROM iTally 
    WHERE 0 = PATINDEX(@Pattern,SUBSTRING(@String COLLATE Latin1_General_BIN,N,1)) 
    FOR XML PATH(''),TYPE 
).value('.[1]','varchar(8000)')); 
GO 

Ich bin nicht klar, genau, welche Zeichen Sie loswerden oder behalten möchten, aber hier ist einige Beispiele (beachten Sie meine Kommentare):

-- remove letters: 
SELECT * FROM dbo.PatExclude8K('abc123!', '[a-zA-Z]'); 
-- Returns: 123! 
; 
-- remove numbers: 
SELECT * FROM dbo.PatExclude8K('abc123!', '[0-9]'); 
--Returns: abc! 
; 
-- only include letters and numbers 
SELECT * FROM dbo.PatExclude8K('###abc123!!!', '[^0-9a-zA-Z]'); 
--Returns: abc123 
; 
-- Remove spaces (note the spaces): 
SELECT * FROM dbo.PatExclude8K('XXX 123 ZZZ', ' '); 
--Returns: XXX123ZZZ 
; 
-- only include letters and "!, ? or ." 
SELECT * FROM dbo.PatExclude8K('123# What?!... ', '[^a-zA-Z!?.]'); 
--Returns: What?!... 
Verwandte Themen