SQL Select ersetzen ganze Zahl mit string

Ziel ist es, einen ganzzahligen Wert zu ersetzen, der in einer SQL-Abfrage mit dem Char-Wert zurückgegeben wird, die Anzahl darstellt. Zum Beispiel:

Ein Tisch-Attribut mit der Bezeichnung 'Sport' ist definiert als ein ganzzahliger Wert zwischen 1-4. 1 = Basketball, 2 = Hockey, etc.. Unten ist die Tabelle der Datenbank und dann die gewünschte Ausgabe.

Database Table:
Player     Team     Sport
Bob        Blue     1
Roy        Red      3
Sarah      Pink     4 

Desired Outputs: 
Player     Team     Sport
Bob        Blue     Basketball
Roy        Red      Soccer
Sarah      Pink     Kickball

Was ist empfehlenswert, diese Ganzzahlwerte für String-Werte übersetzen? Verwenden SQL, um die Werte vor der Übergabe an Programm zu übersetzen? Verwenden Skriptsprache, um den Wert innerhalb des Programms ändern? Ändern Datenbank-Design?

Kommentar #1

Die Datenbank sollte die Werte halten, und führen Sie durch eine Verknüpfung zu einer anderen Tabelle, die die Daten enthält.

Also sollten Sie eine Tabelle haben, die sagen eine Liste von Personen hat

ID Name FavSport
1 Alex 4
2 Mücken 2

Und dann noch eine Tabelle mit eine Liste der Sportarten

ID Sport
1 Basketball
2 Fußball
3 Fußball
4 Kickball

Dann würden Sie eine Verknüpfung zwischen diesen Tabellen machen.

Wählen Sie people.name, sports.sport von Menschen, Sport wo people.favsport = sports.ID

Was würden Sie zurück geben

Name Sport
Alex Kickball
Gnat-Fußball

Sie könnten auch zB eine Case-Anweisung verwenden. nur mit die Personen-Tabelle von oben, Sie kann so etwas wie schreiben

Wählen Sie Name, Fall Favsport = 1 then 'Basketball' Wenn Favsport = 2 then 'Football' als Favsport = 3 then 'Fußball' anderes 'Kickball' Ende als "Sport" von Menschen

Aber das ist sicherlich nicht bewährt.

Kommentar #2

Der CASE Ausdruck könnte helfen. Jedoch möglicherweise noch schneller eine kleine Tabelle mit einem Primärschlüssel Int haben und eine name Zeichenfolge wie

1  baseball
2  football

etc., und JOIN es entsprechend in der Abfrage.

Kommentar #3

Muss MySQL eine CASE-Anweisung. Ich bin nicht mein Server jetzt angemeldet damit ich Doublecheck, aber so etwas wie die folgenden Werke in SQL Server kann nicht:

SELECT
    CASE MyColumnName
    	WHEN 1 THEN 'First'
    	WHEN 2 THEN 'Second'
    	WHEN 3 THEN 'Third'
    	ELSE 'Other'
    END

Kommentar #4

Glauben Sie, wäre es hilfreich, diese Beziehungen zwischen Zahlen und Zeichenketten in der Datenbank selbst gespeichert? Solange Sie haben um diese Beziehungen zu speichern, ist es sinnvoll in der Nähe Ihrer Daten (in der Datenbank) statt im Code zu speichern wo bekomme es verloren. Wenn Sie diese Lösung verwenden, würde dies der ganze Zahl einen Fremdschlüssel auf Werte in einer anderen Tabelle. Sie speichern Ganzzahlen in einer anderen Tabelle, sagen sports , mit sport_id und sport , und nehmen Sie sie als Teil Ihrer Abfrage.

Anstelle von SELECT * FROM my_table würden Sie SELECT * from my_table und verwenden Sie die entsprechende Verknüpfung. Wenn nicht jede Zeile in der Hauptspalte eine entsprechende Sportart hat, könnte Sie eine linke Verknüpfung verwenden, sonst aus beiden Tabellen auswählen und verwenden = in der Where-Klausel wahrscheinlich ausreichend ist.

Kommentar #5

auf jeden Fall haben Sie die DB die Zeichenfolgenwerte halten. Ich bin kein Experte DB mit allen Mitteln, aber ich würde empfehlen, dass Sie eine Tabelle erstellen, die die Saiten und die zugehörigen Ganzzahlwerte enthält. Von dort können Sie eine Beziehung zwischen zwei Tabellen definieren und führen Sie dann eine Verknüpfung Wählen Sie ziehen Sie die String-Version der Ganzzahl mit Vorzeichen in.

tblSport Columns
------------
SportID int (PK, eg. 12)
SportName varchar (eg. "Tennis")


tblFriend Columns
------------
FriendID int (PK)
FriendName (eg. "Joe")
LikesSportID (eg. 12)


In this example, you can get the following result from the query below:
SELECT FriendName, SportName
FROM tblFriend
INNER JOIN tblSport
ON tblFriend.LikesSportID = tblSport.SportID

Mann, es ist spät - ich hoffe, dass ich das richtig. Übrigens, sollten Sie lesen Sie die verschiedenen Arten von Verknüpfungen - Dies ist das einfachste Beispiel eines.

Kommentar #6

In Oracle können Sie die DECODE -Funktion, die eine Lösung bieten würde wo ist das Design der Datenbank außerhalb Ihrer Kontrolle.

enter image description here

Direkt aus der Oracle- Dokumentation:

Beispiel: In diesem Beispiel wird der Wert Warehouse_id decodiert. Wenn Warehouse_id 1 ist, gibt die Funktion 'Southlake'; ist Warehouse_id 2, dann gibt es 'San Francisco'; und so weiter. Wenn Warehouse_id nicht 1, 2, 3 oder 4 ist, gibt die Funktion 'Non' inländische.

SELECT product_id,
       DECODE (warehouse_id, 1, 'Southlake', 
                             2, 'San Francisco', 
                             3, 'New Jersey', 
                             4, 'Seattle',
                                'Non domestic') "Location" 
  FROM inventories
  WHERE product_id < 1775
  ORDER BY product_id, "Location";

Tags lesen