2017-11-09 6 views
1

Ich suche SCCM Datenbank für veröffentlichte AnwendungenSQL Server löschen nach dem ersten Auftreten

Ich erhalte diese Ausgabe

163net_YoudaoDictionary_5.0_ZH_x32_CN_W10 

Aber ich es

163net YoudaoDictionary 5.0 

Also muss ich Methode sein wollen um alles nach _XX zu löschen (waren XX einige Zeichenfolgen)

Ich benutzte PATINDEX('%_[A-Z]%',la.DisplayName) Auftreten von _XX zu erkennen, aber wie LEFT Funktion anweisen, alle nach PATINDEX Ergebnisse> 1

+0

Möchten Sie die Unterstreichungen genauso gut entfernen, wie nach Ihrer erwarteten Ausgabe? –

+0

Ja, wie ich geschrieben habe, sollte die Ausgabe 163net YoudaoDictionary 5.0 (kein Unterverzeichnis) sein –

+0

Würde '_Yo' nicht auch' _XX' passen, oder suchen Sie nur nach Großbuchstaben? – Aquillo

Antwort

0

Okay, ich eine Lösung gefunden: Es Ansicht Datenbank fn_LocalizedAppProperties in SCCM ist (1033), Spaltentitel, müssen sie mit fn_ListLatestApplicationCIs beizutreten (1033) von CI_ID

Vielen Dank aller für Anregungen !!

1

Wenn Ihr String ist immer das gleiche Format und die Länge zu löschen, dann können Sie SUBSTRING() und REPLACE() Funktionen nutzen:

DECLARE @Type NVARCHAR(MAX) = N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'; 

SELECT SUBSTRING(REPLACE (@Type, '_', ' '), 0, 28) AS Result; 

Verwenden Sie REPLACE(), um _ durch ein Leerzeichen ' ' zu ersetzen.

Verwenden Sie SUBSTRING(), um die benötigte Zeichenfolge aus Ihrer Zeichenfolge zu schneiden.

Wenn Sie verwenden möchten PATINDEX():

SELECT REPLACE(SUBSTRING(@Type, 0, PATINDEX('%[_][A-Z][A-Z][_]%', @Type)), '_', ' ') AS Result; 

Update:

Sie haben keine Beispieldaten zur Verfügung stellen, aber hier ist ein Beispiel:

CREATE TABLE MyData (
    STR NVARCHAR(MAX) 
    ); 
INSERT INTO MYData VALUES 
(N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'), 
(N'164net_YoudaoDictionary_4.0_HZ_x86_CN_W10_UD78_KIU7'), 
(N'165net_YoudaoDictionary_4.1_ZH_x32'), 
(N'166net_YoudaoDictionary_3.0_LF_x32_KO_X16'), 
(N'167net_YoudaoDictionary_1.0_EX_x86_RW_B28'); 

SELECT REPLACE(SUBSTRING(STR, 0, PATINDEX('%[_][A-Z][A-Z][_]%', STR)), '_', ' ') AS Result 
FROM MyData; 

Ergebnis:

+-----------------------------+ 
|   Result   | 
+-----------------------------+ 
| 163net YoudaoDictionary 5.0 | 
| 164net YoudaoDictionary 4.0 | 
| 165net YoudaoDictionary 4.1 | 
| 166net YoudaoDictionary 3.0 | 
| 167net YoudaoDictionary 1.0 | 
+-----------------------------+ 
+0

Danke alle, es ist OK für einen Eintrag, aber ich habe volle Tabelle mit Anwendungsname, und kann nicht aktualisieren SCCM-Tabelle wählen dispplayname von fn_ListLatestApplicationCIs (1033) –

+0

@ dragan.vucanovic Sie können Beispieldaten in Ihre Frage eingeben. – Sami

+0

@ dragan.vucanovic Siehe Updates. – Sami

2

Sie könnten Substring() mit Patindex() Funktion verwenden, um das Muster zu finden (d. H. _XX) & mit ' ' ersetzen & dann weiter '_' ersetzen mit ' '

DECLARE @DATA NVARCHAR(MAX) 

SET @DATA = '163net_YoudaoDictionary_5.0_ZH_x32_CN_W10' 

SELECT REPLACE(REPLACE(@DATA, SUBSTRING(@DATA, PATINDEX('%_ZH%', @DATA), LEN(@DATA)), ''), '_', ' '); 

Ergebnis:

163net YoudaoDictionary 5.0 
3

verwenden:

DECLARE @DataSoruce TABLE 
(
    [value] NVARCHAR(4000) 
); 

INSERT INTO @DataSoruce ([value]) 
VALUES ('163net_YoudaoDictionary_5.0_ZH_x32_CN_W10') 

SELECT REPLACE(SUBSTRING([value], 0, PATINDEX('%[_][A-Z][A-Z]%',[value] COLLATE Latin1_General_100_BIN2)), '_', ' ') 
FROM @DataSoruce; 
+0

@ dragan.vucanovic https://meta.stackexchange.com/questions/147531/how-mark-my-question-as-answered-on-stackoverflow – gotqn

2

Try this:

declare @str varchar(100) 
set @str = '163net_YoudaoDictionary_5.0_ZH_x32_CN_W10' 
select REPLACE(LEFT(@str, PATINDEX('%[_][A-Z][^a-z]%',@str COLLATE SQL_Latin1_General_CP1_CS_AS) - 4), '_', ' ') 

Im Wesentlichen benötigen Sie einen solchen regulären Ausdruck '%[_][A-Z][^a-z]%', um zu finden, was Sie brauchen, und legen Sie die Sortierung der gesuchten Zeichenfolge auf Groß-/Kleinschreibung fest, z. B. SQL_Latin1_General_CP1_CS_AS.

0

Probentabelle:

DECLARE @temp TABLE (
    string nvarchar(max) 
) 

INSERT INTO @temp VALUES 
(N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'), 
(N'157org_WhateverDictionary_7.0_smth_KJ_x64_WN_W7'), 
(N''), 
(NULL) 

Script:

SELECT RTRIM(REPLACE(LEFT(string,PATINDEX('%[_][A-Z][A-Z][_]%',string COLLATE Latin1_General_100_BIN2)),'_',' ')) 
FROM @temp 

Ausgang:

(No column name) 
163net YoudaoDictionary 5.0 
157org WhateverDictionary 7.0 smth 

NULL 

Erläuterung:

Ich denke, Sie wissen, was für RTRIM steht, REPLACE, LEFT, PATINDEX. Und COLLATE Latin1_General_100_BIN2 binäre Sortierung bedeutet, dass die Suche ein direkter Byte-Vergleich ist, der scheinbar schneller ist. Mehr hereBinär-Sortierungen Teil.

Verwandte Themen