2016-10-24 3 views
0

Ich habe diese Zeichenfolge in einer Spalte namens . Beispiel für die Zeichenfolgen, die dort vorhanden sind:Teilstring (..., ..., CHARINDEX (....) - 0.5) Funktion

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001/B1 

, was ich will zu bekommen:

RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC-001 

ohne /B1

Wenn ich diesen Code schrieb:

SELECT Substring([parent_id], 1, 
       CHARINDEX('/B',parent_id,25)-1) 
FROM [c3d_aug].[dbo].[atta_properties] 

Ich habe Dieser Fehler:

"Msg 537, Level 16, State 3, Line 1 Invalid length parameter passed to the LEFT or SUBSTRING function."

Nach dem Test habe ich versehentlich geändert -1 zu -0.5 es hat gut funktioniert.

SELECT Substring([parent_id],1, 
       CHARINDEX('/B',parent_id,25)-0.5) 
FROM [c3d_aug].[dbo].[atta_properties] 

Kann jemand erklären warum?! Bitte beachten Sie, dass die oben angegebene Hauptsaite keine Leerzeichen enthält.

+0

Nein, es ist CHARINDEX gibt 60 in Ihrem Beispiel zurück –

+0

deklarieren @Parentid varchar (max) = 'RBIA-3340-CU-XM-01-D/RBIA-3340-01-4-D-34080-11441A1-2TC -001/B1' wählen charindex ('/ B', @parentid) - Liefert 60 select substring (@ parentid, 1, charindex ('/ B', @parentid) - 1) –

Antwort

1

Ich würde nicht empfehlen, dass Sie -0.5 verwenden. Es funktioniert wahrscheinlich, weil negative Zahlen für negative Zahlen in Richtung Null "abgeschnitten" werden, wenn Floats zurück in ganze Zahlen konvertiert werden (wie es die Funktion erfordert).

Ich würde stattdessen vorschlagen:

SElECT LEFT([parent_id], 
      CHARINDEX('/B', parent_id + '/B', 25) - 1 
      ) 
FROM [c3d_aug].[dbo].[atta_properties]; 

durch das Muster am Ende der Zeichenfolge hinzufügen, Sie müssen nicht über eine Rückkehr von 0 von CHARINDEX() kümmern.

LEFT() ist einfach bequemer als SUBSTRING().

+0

leider wieder zu fragen, aber warum würden wir eine 0 von einer charindex-Funktion bekommen? –

+0

die Funktion soll den Ort eines bestimmten Charakters geben?, Ich bin nur neu in SQL, Entschuldigung für die Frage viel und danke für Ihre Antwort –

+0

@AutomationENG. . . Die Funktion gibt '0' zurück, wenn die Zeichenfolge nicht gefunden wird. –