Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何将varchar转换为boolean_Postgresql_Postgresql 9.3_Postgresql 9.2_Postgresql 9.4 - Fatal编程技术网

Postgresql 如何将varchar转换为boolean

Postgresql 如何将varchar转换为boolean,postgresql,postgresql-9.3,postgresql-9.2,postgresql-9.4,Postgresql,Postgresql 9.3,Postgresql 9.2,Postgresql 9.4,我有一个变量“x”,它在staging表中是varchar,但在目标表中设置为boolean,它有“true”和“false”值。如何在postgresql中将varchar转换为布尔值?如果varchar列包含(不区分大小写): t,true,y,yes,on,1 f,false,n,no,off,0 您可以简单地将其转换为布尔值,例如: select 'true'::boolean, 'false'::boolean; bool | bool ------+------ t

我有一个变量“x”,它在staging表中是varchar,但在目标表中设置为boolean,它有“true”和“false”值。如何在postgresql中将varchar转换为布尔值?

如果varchar列包含(不区分大小写):

  • t
    true
    y
    yes
    on
    1
  • f
    false
    n
    no
    off
    0
您可以简单地将其转换为布尔值,例如:

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

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

请参阅。

,了解旧的PostgreSQL版本和红移转换将不起作用,但以下操作确实起作用:

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

另请参见上的讨论。

对于红移,我最幸运的是:

SELECT DECODE(column_name, 
             'false', '0', 
             'true', '1'
             )::integer::boolean from table_name;
这只是将varchar字符串映射到
'0'
'1'
,然后红移可以首先转换为整数,最后转换为布尔值


这种方法的一个很大的优点是,它可以扩展为包含您希望映射的任何其他字符串。i、 e:

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


您可以阅读更多有关解码方法的信息

如果您可以假设除
true
之外的任何内容都是
false
,那么您可以使用:

select
  column_name = 'true' column_name_as_bool
from
  table_name;

是否要插入,请选择“更新”?或者什么?我想更新这不是真的,请参见
选择'true'::varchar::boolean,'false'::varchar::boolean它有什么问题??嗯,很有趣。我发誓我在新的PostgreSQL中也看到了一个错误,但这似乎只是红移和旧的PostgreSQL版本中的一个问题:无效操作:无法将类型字符转换为布尔值;我似乎不需要中间的
::INTEGER::
强制转换<代码>选择解码(列名称,'N','0','Y','1')::表名称中的布尔值在红移中对我来说很好。