Spalteninhalt ab bestimmten Punkt abschneiden

Hallo zusammen,

mir viel kein besserer Titel ein der mein Problem beschreiben könnte.

es geht um eine simple Abfrage like :wink: folgende

select *
from bauftrag
inner join wauftrag on ( bauftrag.bauftrag = wauftrag.wauftrag)
where bauftrag.status = ‚3‘

diese würde funktionieren wenn wauftrag wirklich = bauftrag ist, nun habe ich aber direkt eine Positionsnummer hinter dem wauftrag sodass diese Abfrage mir 0 Zeilen zurückgibt.

ein Beispiel
bauftrag = 465888 dazugehöriger wauftrag 465888.001 und 465888.002

die Abfrage soll nun alle waufträge ausspucken die die bauftrag nr enthalten, sprich vergleich ab inkl. „.“ abschneiden.

nur wie stell ich das an? hab es schon mit einen CAST versucht, das würde funktionieren doch sind bei uns leider die Nummern vor dem „.“ unterschiedlich lang.

hat jemand eine Idee oder Ansatzpunkt

Gruß
Daniel

benutze in übrigen MSSQL 2000

select *
from bauftrag
inner join wauftrag on (
CONCAT( bauftrag.bauftrag, ‚.‘ ) = SUBSTRING( wauftrag.wauftrag, 1, (
LENGTH( bauftrag.bauftrag ) +1 )
)
where bauftrag.status = ‚3‘

geht das ??

Hi RakonDark

erstmal danke für deine Antwort SQL bringt mir allerdings bei deiner Abfrage den Fehler „concat wird nicht als Funktionsname erkannt“

kannst du nochmal gucken?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

also bei mir funktioniert ein

SELECT \*
FROM bauftrag
INNER JOIN wauftrag ON ( CONCAT( bauftrag.bauftrag, '.' ) = SUBSTRING( wauftrag.wauftrag, 1, (
LENGTH( bauftrag.bauftrag ) +1 ) )
)

allerdings hab ich auch die tabellenfelder in VARCHAR(20) für bauftrag.bauftrag und wauftrag.wauftrag

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

also bei mir funktioniert ein

SELECT *
FROM bauftrag
INNER JOIN wauftrag ON ( CONCAT( bauftrag.bauftrag, ‚.‘ ) =
SUBSTRING( wauftrag.wauftrag, 1, (
LENGTH( bauftrag.bauftrag ) +1 ) )
)

allerdings hab ich auch die tabellenfelder in VARCHAR(20) für
bauftrag.bauftrag und wauftrag.wauftrag

hmm versteh ich nicht, hab mal spaßeshalber auf meiner Testdb auch auf varchar(20) gestellt, war vorher char(20) bricht aber immer noch mit der gleichen Fehlermeldung ab.

Server: Nachr.-Nr. 195, Schweregrad 15, Status 10, Zeile 7
‚CONCAT‘ wird nicht als Funktionsname erkannt.

benutzt du evtl. SQL 2005?

wenn ich das ganze als Funktion umbaue dann schluckt er zumindest die Abfrage allerdings läuft der SQL Server auf 99% auf ich breche dann die Abfrage frühzeitig ab da das ja dann nicht sein kann, hab sie folgendermaßen umgebaut

SELECT bauftrag.bauftrag
FROM BAUFTRAG
INNER JOIN
WAUFTRAG ON { fn CONCAT(BAUFTRAG.BAUFTRAG, ‚.‘) } = SUBSTRING(WAUFTRAG.WAUFTRAG, 1, { fn LENGTH(BAUFTRAG.BAUFTRAG) } + 1)

vll. fällt dir ja noch was ein?!

gruß

Hi noch mal,

dank dir RakonDark für deine Hilfe und Tipps, nur dadurch bin ich letzendlich auf die Lösung gekommen

select *
from bauftrag
inner join wauftrag
on (bauftrag.bauftrag = substring(wauftrag.wauftrag,1,({fn length(wauftrag.wauftrag)} - 4)))

da ich davon ausgehen kann das es immer 3 Stellen hinter dem Punkt sind kann ich mit Substring die letzten 4 Stellen inkl. „.“ einfach löschen.

Prima nochmals vielen Dank

Gruß

Hi noch mal,

Prima nochmals vielen Dank

Gruß

Ja super, viele wege gehen nach rom :smile: