2013-05-25 25 views
21

W mojej tabeli bazy danych (MySQL) znajduje się kolumna z 1 i 0 dla odpowiednio reprezentujących true i false.SQL Jak zastąpić wartości select return?

Ale w , potrzebuję go wymienić na true lub false do drukowania w GridView.

Jak zrobić moje zapytanie SELECT, aby to zrobić?

W moim bieżącej tabeli:

id | name | hide 
    1 | Paul | 1 
    2 | John | 0 
    3 | Jessica | 1 

muszę wykazać w ten sposób:

id | name | hide 
    1 | Paul | true 
    2 | John | false 
    3 | Jessica | true 
+4

Proszę pamiętać, że tabele mają nazwy - możemy wymyślić nazwy dla ciebie, ale daje odpowiedź większą spójność, jeśli powiesz nam nazwę tabeli. Dobrym pomysłem jest również określenie, którego DBMS używasz, ponieważ istnieją różnice między różnymi DBMS. –

+0

Dziękujemy! Zapamiętam to następne! – Lai32290

Odpowiedz

30

Masz kilka możliwości:

  1. Zarejestrowany ze stołem domeny z TRUE, FALSEWartość boolowska.
  2. Zastosowanie (as pointed in this answer)

    SELECT CASE WHEN hide = 0 THEN FALSE ELSE TRUE END FROM 
    

    Lub jeśli Boolean nie jest obsługiwany:

    SELECT CASE WHEN hide = 0 THEN 'false' ELSE 'true' END FROM 
    
10

Jeśli chcesz kolumny jako ciąg wartości, a następnie:

SELECT id, name, CASE WHEN hide = 0 THEN 'false' ELSE 'true' END AS hide 
    FROM anonymous_table 

Jeśli DBMS obsługuje Boolean, można użyć zamiast:

SELECT id, name, CASE WHEN hide = 0 THEN false ELSE true END AS hide 
    FROM anonymous_table 

to samo z tym że cudzysłowy wokół nazwy false i true zostały usunięte.

+0

Mysql 5.7.19-0ubuntu0.16.04.1 - Aby uzyskać 'As hide' do pracy, musiałem umieścić nawiasy wokół' CASE ... END'. A więc: SELECT id, name, (CASE WHEN ... END) AS hide FROM ... ' – ToolmakerSteve

6

Można użyć odlew w klauzuli SELECT jak:

SELECT id, name, CAST(hide AS BOOLEAN) FROM table_name; 
17

można zrobić coś takiego:

SELECT id,name, REPLACE(REPLACE(hide,0,"false"),1,"true") AS hide FROM your-table 

Nadzieja to może pomóc.

+0

Podczas pracy z funkcją REPLACE (która to ma DBMS?), Podwójna aplikacja nie jest aż tak elegancka i robi "Rozciąga się do 3 lub więcej przypadków bardzo dobrze, prawda? Jest to jednak odpowiedź alternatywna. –

+0

Po prostu wypróbowałem to z MySQL i masz rację nie jest zbyt dobrym podejściem, jeśli masz więcej niż 3 przypadki, ale w tym przypadku to rozwiązanie działa tak, jak wspomniałeś. :) dzięki za komentowanie –

4

mam rozwiązanie

SELECT 
    CASE status 
     WHEN 'VS' THEN 'validated by subsidiary' 
     WHEN 'NA' THEN 'not acceptable' 
     WHEN 'D' THEN 'delisted' 
     ELSE 'validated' 
    END AS STATUS 
    FROM SUPP_STATUS 

ten korzysta przypadku To kolejny manipulować wybraną wartość dla więcej niż dwóch opcji.

0

Mówię, że stwierdzenie sprawy jest błędne, ale może to być dobre rozwiązanie. Jeśli zdecydujesz się użyć instrukcji CASE, musisz upewnić się, że jest spełniony co najmniej jeden warunek CASE. W przeciwnym razie musisz zdefiniować procedurę obsługi błędów, aby wykryć błąd. Przypomnij sobie, że nie musisz tego robić z instrukcją IF.

SELECT if(hide = 0,FALSE,TRUE) col FROM tbl; #for BOOLEAN Value return 

lub

SELECT if(hide = 0,'FALSE','TRUE') col FROM tbl; #for string Value return