2

Ich habe eine Variable 'x', die Varchar in Staging-Tabelle ist, aber es ist auf Boolean in Zieltabelle gesetzt, die 'wahr' und 'falsch' Werte hat. Wie kann ich Varchar in postgresql in boolean konvertieren?Wie man varchar in boolean umwandelt

+1

Möchten Sie einfügen, wählen Sie update? Oder was? –

+0

Ich möchte aktualisieren – Ramesh

Antwort

5

Wenn die VARCHAR Spalte enthält one of the strings (Groß- und Kleinschreibung):

  • t, true, y, yes, on, 1
  • f, false, n, no, off, 0

können Sie werfen es einfach boolean, z:

select 'true'::boolean, 'false'::boolean; 

bool | bool 
------+------ 
t | f 
(1 row) 

Siehe SQLFiddle.

+0

Das ist nicht wahr, siehe 'wählen Sie 'true' :: varchar :: boolean, 'false' :: varchar :: boolean;' –

+1

Was ist los damit ?? [SQLFiddle] (http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/17922) – klin

+0

Hmm, interessant. Ich hätte geschworen, dass ich auch einen Fehler in PostgreSQL gesehen habe, aber es scheint, dass dies nur ein Problem in Redshift und alten PostgreSQL-Versionen ist. –

1

Für alte PostgreSQL-Versionen und in Redshift Gießen wird nicht funktionieren, aber das folgende tut:

SELECT boolin(textout('true'::varchar)), boolin(textout('false'::varchar)); 

Siehe SQLFiddle auch die Diskussion über die PostgreSQL list sehen.

0

Für Redshift, hatte ich das beste Glück mit dem folgenden:

SELECT DECODE(column_name, 
      'false', '0', 
      'true', '1' 
      )::integer::boolean from table_name; 

Dieses einfach bildet die varchar Strings '0' oder '1' die Redshift dann zunächst auf ganze Zahlen werfen kann, dann boolean schließlich zu.


Ein großer Vorteil dieses Ansatzes besteht darin, dass es keine zusätzliche Strings erweitert werden können, die Sie zugeordnet werden möchten. das heißt:

SELECT DECODE(column_name, 
      'false', '0', 
      'no', '0', 
      'true', '1', 
      'yes', '1' 
      )::integer::boolean from table_name; 

Sie können here mehr über die DECODE Methode lesen.

Verwandte Themen