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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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中使用XOR更新值时引发语法错误_Postgresql_Syntax Error - Fatal编程技术网

尝试在Postgresql中使用XOR更新值时引发语法错误

尝试在Postgresql中使用XOR更新值时引发语法错误,postgresql,syntax-error,Postgresql,Syntax Error,我正在尝试更新我的Postgres数据库中salary表的一列。我尝试使用的脚本是: UPDATE "LC".sex SET sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex)); 因为这在MySQL中起作用。但是,我得到了一个语法错误: ERROR: syntax error at or near "ASCII" LINE 2: SET sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex));" 我试

我正在尝试更新我的Postgres数据库中
salary
表的一列。我尝试使用的脚本是:

UPDATE "LC".sex
SET sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex));
因为这在MySQL中起作用。但是,我得到了一个语法错误:

ERROR:  syntax error at or near "ASCII"
LINE 2:  SET sex = CHAR(ASCII('f') ^ ASCII('m') ^ ASCII(sex));"
我试着用
CHR()

function chr(double precision) does not exist
我几乎放弃了,直到我尝试了这个:

SELECT CHAR(ASCII('f') ^ ASCII('m') ^ ASCII('f'));
这也给了我同样的语法错误,
SELECT CHAR(ASCII('f')^ASCII('m');
在Postgres中也能工作。所以我被难住了。我做错了什么


谢谢。

在PostgreSQL中,
^
运算符用于求幂,您可能希望
#
用于按位异或,有关详细信息,请参阅精细手册中的

所以你可以说:

update "LC".sex
set sex = chr(ascii('f') # ascii('m') # ascii(sex));
然而,我有点好奇你在所有的争吵中试图实现什么。如果
sex
'f'
那么你得到
'm'
;如果
sex
'm'
那么你得到
'f'
;如果
sex
null
你得到
null
;如果
sex
其他任何东西嗯,你胡说八道:

=> select sex, chr(ascii('f') # ascii('m') # ascii(sex))
   from (values ('f'), ('m'), ('F'), ('M'), (null), ('X'), ('y')) t(sex);
 sex | chr 
-----+-----
 f   | m
 m   | f
 F   | M
 M   | F
     | 
 X   | S
 y   | r
(7 rows)
如果你只是想改变性别,为什么不说:

update "LC".sex
set sex = case lower(sex) when 'f' then 'm' when 'm' then 'f' else null end;

如果这是一个问题,一个小的修改将保留大小写。这将把除
'f'
'f'
'm'
'm'
之外的任何内容转换为
,但可能这不是问题。

非常感谢您的回复。我不知道。我仍在转换到Postgresql(到目前为止,我刚刚了解到,在Postgres中,
LIKE
是区分大小写的)。我不知道你也可以在更新查询中使用
case
。以前只在select中使用过它。我只是看到了这个方法,觉得使用它会很酷。至于你关于用例的问题,是的,我基本上只需要翻转一下性别。