Ich habe eine Tabelle, in der eine der Tabellenspalten (dritte_row) eine durch Kommas getrennte Liste von Zahlen als Zeichenfolge speichert, aber wenn ihr Wert 'A' ist, bedeutet dies eine Kombination aller möglichen Zahlen. Wie gehe ich das an, damit die Abfrage alle Zeilen zurückgibt, die die dritte_Zeile als 'A' haben und den Rest, wo dritte_Zeile gleich einem der Werte in der durch Kommas getrennten Zeichenfolge ist?
Als Referenz hier das Format der Tabelle:
erste Reihe | zweite Reihe | dritte Zeile |
---|---|---|
0028001070200 | 50 | EIN |
0049048000701 | 51 | 01,04,02,31, |
Ich habe auch diese Abfrage versucht, aber kein Glück:
SELECT
sds.scheme_code,
rs.scheme_name
FROM
trea.salary_deduction_schemes sds
LEFT JOIN
trea.receipt_schemes rs
ON sds.scheme_code = rs.scheme_code
WHERE sds.list_object_head = 'A' OR 16 IN(regexp_split_to_table(sds.list_object_head, E','))
Ihre Methode funktioniert fast:
WHERE sds.list_object_head = 'A' OR
16 IN (SELECT val::int
FROM regexp_split_to_table(sds.list_object_head, E',') val
)
Sie können auch den String-Matching verwenden:
WHERE ',' || sds.list_object_head || ',' LIKE '%,' || 16 || ',%'
Oder Sie könnten in ein Array konvertieren und Array-Operationen verwenden.
Ich würde dringend vorschlagen, eine andere Darstellung als Zeichenfolgen zum Speichern von ganzzahligen Werten zu finden - vorzugsweise eine andere Tabelle oder vielleicht ein Array.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen