Benutzer mit den meisten Antworten
Abfrage nach Teil eines Feldes

Frage
-
Guten Tag,
ich habe in einem Feld "Typen" vom Typ (nvarchar(MAX)) Texte gespeichert. Nun möchte ich nach Datensätzen suchen, in welchen in dem Feld bestimmte Wörter vorkommen.
Ich hatte es so probiert:
Select * from objekttypen where typen=N'*Haus'
Funktioniert aber nicht. Ich suche dabei die Felder, welche das Wort "Haus" besitzen neben anderen, z.B. steht in dem einem Feld: "Dach, Haus, Fenster". Dieser Datensatz sollte dann gefunden werden.
Ich hoffe, ich habe mich verständlich ausgedrückt und würde mich freuen, wenn ich Hilfe bekomme.
Schönen Feiertag noch
Claudia
Antworten
-
Hallo Claudia,
SELECT * FROM objekttypen WHERE typen LIKE '%Haus%'
Schöne Grüsse.- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 1. Mai 2012 19:06
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
-
Hallo Claudia,
wenn das wirklich eine als Freitext umgesetzte Werteliste sein soll, wäre es sinnvoller, dein Datenbankmodell anzupassen.
[Typen]
ID (int, PK, IDENTITY)
Name (nvarchar( 100 ))
[Objekte]
ID (int, PK, IDENTITY)
Name (nvarchar( 100 ))
...
[Objekttypen]
TypID (int, UK mit ObjektID), (FK von Typen.ID)
ObjektID (int, UK mit TypID), (FK von Objekte.ID)
Dann kannst Du entweder gleich über die ID Werte suchen oder dir eine View bauen, die die Typnamen mit ausliest und dann mit festen Werten suchen.
LIKE '%...%' ist in der Regel ziemlich unperformant, das könntest Du über die o.g. Struktur erheblich effizienter lösen.Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
-
Hallo Claudia
Claudia Salzwedel wrote:
Select * from objekttypen where typen=N'*Haus'
Funktioniert aber nicht. Ich suche dabei die Felder, welche das Wort
"Haus" besitzen neben anderen, z.B. steht in dem einem Feld: "Dach, Haus,
Fenster". Dieser Datensatz sollte dann gefunden werden.Über die fehlende Normalisierung und Verbesserung, das in eine eigene Tabelle zu legen, hat ja Stephan bereits geschrieben. Ebenfalls die Bedenken bezüglich LIKE '%....%'
Frage: Soll, wenn Du nach *Haus suchst auch etwas kommen, was in der Liste z.B. "Gertenhaus, Fenster, Dach" drin hat? Oder nur das, was wirklich Haus drin hat? Falls zweiteres, dann musst Du den Vorschlag von Joerg_x noch erweitern. Annahme als Trennzeichen wurde immer , und ein Leerzeichen benutzt ' '. Dann würde das Statement so aussehen:
SELECT * FROM objekttypen WHERE ' ' + typen + "," LIKE '% Haus,%'
Gruss
Henry- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
Alle Antworten
-
Hallo Claudia,
SELECT * FROM objekttypen WHERE typen LIKE '%Haus%'
Schöne Grüsse.- Als Antwort vorgeschlagen Stefan FalzModerator Dienstag, 1. Mai 2012 19:06
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
-
Hallo Claudia,
wenn das wirklich eine als Freitext umgesetzte Werteliste sein soll, wäre es sinnvoller, dein Datenbankmodell anzupassen.
[Typen]
ID (int, PK, IDENTITY)
Name (nvarchar( 100 ))
[Objekte]
ID (int, PK, IDENTITY)
Name (nvarchar( 100 ))
...
[Objekttypen]
TypID (int, UK mit ObjektID), (FK von Typen.ID)
ObjektID (int, UK mit TypID), (FK von Objekte.ID)
Dann kannst Du entweder gleich über die ID Werte suchen oder dir eine View bauen, die die Typnamen mit ausliest und dann mit festen Werten suchen.
LIKE '%...%' ist in der Regel ziemlich unperformant, das könntest Du über die o.g. Struktur erheblich effizienter lösen.Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
-
Hallo Claudia
Claudia Salzwedel wrote:
Select * from objekttypen where typen=N'*Haus'
Funktioniert aber nicht. Ich suche dabei die Felder, welche das Wort
"Haus" besitzen neben anderen, z.B. steht in dem einem Feld: "Dach, Haus,
Fenster". Dieser Datensatz sollte dann gefunden werden.Über die fehlende Normalisierung und Verbesserung, das in eine eigene Tabelle zu legen, hat ja Stephan bereits geschrieben. Ebenfalls die Bedenken bezüglich LIKE '%....%'
Frage: Soll, wenn Du nach *Haus suchst auch etwas kommen, was in der Liste z.B. "Gertenhaus, Fenster, Dach" drin hat? Oder nur das, was wirklich Haus drin hat? Falls zweiteres, dann musst Du den Vorschlag von Joerg_x noch erweitern. Annahme als Trennzeichen wurde immer , und ein Leerzeichen benutzt ' '. Dann würde das Statement so aussehen:
SELECT * FROM objekttypen WHERE ' ' + typen + "," LIKE '% Haus,%'
Gruss
Henry- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 13:23
-
Hallo Claudia Salzwedel,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.