Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
Sql 字符集不匹配_Sql_Oracle - Fatal编程技术网

Sql 字符集不匹配

Sql 字符集不匹配,sql,oracle,Sql,Oracle,我有这样一个SQL语句: SELECT a.ColumnA, b.ColumnB || CASE WHEN TRIM(c.ColumnC) IS NOT NULL THEN ' (' || c.ColumnC || ')' ELSE '' END AS ClassName FROM TableA a INNER JOIN TableB b ON a.SomeColumn = b.SomeColumn INNER JOIN TableC c on a.SomeCol = c.Som

我有这样一个SQL语句:

SELECT 
  a.ColumnA, b.ColumnB || 
 CASE WHEN TRIM(c.ColumnC) IS NOT NULL THEN ' (' || c.ColumnC || ')' ELSE '' END AS ClassName
 FROM TableA a INNER JOIN TableB b ON a.SomeColumn = b.SomeColumn 
 INNER JOIN TableC c on a.SomeCol = c.SomeCol
在大小写表达式的“ELSE”部分出现错误“字符集不匹配”。 有人能告诉我哪里做错了吗?谢谢。

是否尝试将“”替换为NULL?
另外,请尝试完全删除ELSE部分,因为它将返回NULL。

如果没有CAST语句,则无法连接VARCHAR和NVARCHAR值

CASE WHEN TRIM(c.ColumnC) IS NOT NULL 
     THEN ' (' || c.ColumnC || ')' 
     ELSE N'' END A

这是一个更简洁的解决方案。N''为您提供了一个unicode空字符串

只需删除ELSE,您的代码就会更容易阅读

ColumnB列和ColumnC列是如何定义的?在没有ELSE子句的情况下查询可以工作吗?语句没有问题(假设最后一个连接也在a,b SomeColumn上,而您只是缩写了列名)。你能用数据库字符集信息更新这个问题吗?我找到了答案。我们需要用与ColumnC相同的类型铸造ELSE零件。可能是这样,它知道CASE表达式结果的数据类型。所以,它是:当。。。。。。ELSE CAST(''AS NVarchar2(1))ENDSo Plasmer的评论/问题是线索-我们不知道c.ColumnC是NVarchar2-大多数人在阅读您的问题时都会假设varchar2-很高兴您找到了解决方法-目的是将ColumnC中的值(如果存在)附加到ColumnB。如果我用NULL替换ELSE部分,那么整个值将变为NULL(b.ColumnB | | NULL=NULL),我不希望这样。不是真的。从dual中选择“a”| | null;返回'a'此外,空字符串常量('')只是写入“to_char(NULL)”的一种方式。