stefanlausl
Goto Top

MSSQL Selektion eines Strings der im Bereich Von-Bis enthalten ist

Hallo,

ich habe eine Tabelle von Sachbearbeitern die einen gewissen Bestand an Kunden betreuen müssen.

Die Aufteilung ist wie folgt:

Sachbearbeiter 1
NachnameVon: "LEI%"
NachnameBis: "MIE%"

Sachbearbeiter 2
NachnameVon: "BAS%"
NachnameBis: "CAO%"


Eine Möglichkeit die ich habe ist die Suche mit BETWEEN:

Suche nach Sachbearbeitern für den Nachnamen "Leithner"


        ---SUCHE NACH DEN NAMEN MIT LEI............
       
	SELECT
		CASE WHEN 
				'L' BETWEEN 'L' AND 'M'  
			AND
				'E' BETWEEN 'E' AND 'I'  
			AND
				'I' BETWEEN 'I' AND 'E'   ---hier muss ich eigentlich von 'E' nach 'I' suchen  
		 THEN 1 
                ELSE 0 
		END

Allerdings müsste ich dann wissen an welcher Stelle im Alphabet welcher Buchstabe kommt denn nur so funktioniert die Suche.

Gibt es da vom SQL.Server etwas besseres ?


Für Eure Hilfe wäre ich sehr dankbar.


Gruss Stefan

Content-Key: 488905

Url: https://administrator.de/contentid/488905

Printed on: April 25, 2024 at 06:04 o'clock

Mitglied: 140913
140913 Aug 26, 2019 updated at 14:44:21 (UTC)
Goto Top
Sachbearbeiter 1
NachnameVon: "LEI%"
NachnameBis: "MIE%"
Das wäre doch was für Pattern-Matching ...
SELECT * 
FROM SACHBEARBEITER 
WHERE Nachname LIKE 'Le[i-z]%'
 OR Nachname LIKE 'L[f-z][a-z]%'
 OR Nachname LIKE 'M[a-h][a-z]%'
 OR Nachname LIKE 'Mi[a-e]%';
usw.

Pattern Matching in Search Conditions
Member: erikro
erikro Aug 26, 2019 updated at 14:55:55 (UTC)
Goto Top
Moin,

SQL ist länger her. Aber, wenn ich mich recht erinnere, dann müsste das doch in etwa so gehen:

select * from datatable where nachname >=lei and nachname <=mie

<edit>Bzw. anders herum:

select * from bearbeiter where nachnamevon <= var_suchname and nachnamebis >= var_suchname

hth

Erik
Member: GrueneSosseMitSpeck
Solution GrueneSosseMitSpeck Aug 26, 2019 at 21:19:22 (UTC)
Goto Top
Die Aufteilung ist wie folgt:

Sachbearbeiter 1
NachnameVon: "LEI%"
NachnameBis: "MIE%"

Sachbearbeiter 2
NachnameVon: "BAS%"
NachnameBis: "CAO%"


Gibt es da vom SQL.Server etwas besseres ?

du denkst zu kompliziert. Du schreibtst MSSQL als Produkt, und der kann seit 15 Jahren direkte Stringvergleiche.
Übersetz doch einfach mal deine Texte in das SQL-Englisch, dann bist du am Ziel

select * from Tabelle where left(nachnamenspalte,3) between 'LEI' and 'MIE'
oder
select * from Tabelle where left(nachnamenspalte,3) >='LEI' and left(nachnamenspalte,3) <='MIE'

wir nutzen genau sowas sehr intensiv, aber setz dir einen Index auf die Nachnamensspalte, ansonsten gibt das längere Hänger beim Zugriff auf die Datenbank.
Member: StefanLausL
StefanLausL Aug 27, 2019 at 05:05:12 (UTC)
Goto Top
Danke genau das war es.

Manchmal sieht man den Wald vor lauter Bäumen nicht und übersieht die einfachsten Sachen.