2016-11-21 18 views
4

Lassen Sie uns sagen, dass wir in einem table folgende Werte auf Column als String gespeichert: ‚‘Ersetze das erste Vorkommen von '.' in SQL-String

Select ValuesT from TableT; 

    ValuesT 
-9.827.08 
-9.657.40 
-80.000.00 
-8.700.00 
-8.542.43 
-8.403.00 

Wie durch nichts ersetzt werden kann nur das erste Vorkommen von (Punkt) von der Schnur?

Ex: für -9.827.08 sollte -9827.08

sein, die ich mit stuff Funktion versucht, aber das wird für nicht funktionieren -80.000.00

select stuff(ValuesT ,3,1,'') from TableT 

Antwort

11

Verwenden STUFF Funktion

Finden Sie das erste Vorkommen von .CHARINDEX mit und entfernen Sie es mit STUFF

SELECT STUFF(valuesT, CHARINDEX('.', valuesT), 1, '') 
FROM TableT 
1

Eine andere Möglichkeit.

WITH sampleData AS 
( 
    SELECT val FROM (VALUES 
    ('-9.827.08'), ('-9.657.40'), ('-80.000.00'), ('-8.700.00'), 
    ('-8.542.43'),('-8.403.00')) x(val) 
) 
SELECT SUBSTRING(val, 1, d1.d-1)+SUBSTRING(val, d1.d+1, 100) 
FROM sampleData 
CROSS APPLY (VALUES (CHARINDEX('.',val))) d1(d); 

Es ist ein wenig mehr Code, aber genauso effizient. Mit dieser Technik können Sie noch viel mehr erreichen.

+0

Schön! Welchen Umfang haben VALUES in Ihrem CTE? Ich habe auch etwas mit CTE versucht, aber ich bin nicht auf das Ergebnis gekommen. 10x –

+1

Der CTE war nur eine schnelle Möglichkeit, einen echten Tisch zu emulieren. Nicht anders als wenn ich das tat: CREATE Tabelle dbo.sampledata (val varchar (20)); INSERT dbo.sampledata WERTE ('-9.827.08'), ('-9.657.40'), ('-80.000.00'), ('-8.700.00'), ('-8.542. 43 '), (' - 8.403.00 '); SUBSTRING WÄHLEN (val, 1, d1.d-1) + SUBSTRING (val, d1.d + 1, 100) VON dbo.sampleData CROSS APPLY (WERTE (CHARINDEX ('.', Val))) d1 (d); edit: gerade jetzt gelernt, dass Sie nicht SQL-Code in diesen Antworten tun können;) –

+0

Vielen Dank! Ich habe den Code einfach in SQL Environment kopiert und dort formatiert. –

Verwandte Themen