IT咨询服务Db2SQLnull值

菜鸟求助 DB2 应用关于NULL值填充的问题

各位大神,
SQL语句问题。如何select出来一个虚列并且用null来填充呢

假设有表table里面只有一列t
例如    select t, 0 as c1, 'abc' as c2 from table
选出来结果是
t   c1   c2
1   0   abc
2   0   abc
3   0   abc如果用 null值 select null as c1, t as t1 from table会报错, 我记得在 SQL server中是可以这么实现的, 请问各位大神,DB2可不可以实现类似的功能呢?
参与7

6同行回答

shadowflareshadowflare软件开发工程师交通银行
1L的例子就是典型的既没有明确指定数据类型,又没有上下文可利用(null是孤零零出现的,没有和其他变量发生运算)的应用场景。显示全部
1L的例子就是典型的既没有明确指定数据类型,又没有上下文可利用(null是孤零零出现的,没有和其他变量发生运算)的应用场景。收起
银行 · 2015-05-05
浏览909
shadowflareshadowflare软件开发工程师交通银行
回复 1# Aaron_liu 9.7版本之后可以直接用null(这里的null被认为是varchar类型)。9.7版本之前可以写cast (null as int)或者null||'',明确指定null的类型。在SQL解析过程中,对于每一个token,系统首先要判断其种类(关键词、数据库对象名、常量),如果是常量的话,接着要判断常量的数...显示全部
回复 1# Aaron_liu
9.7版本之后可以直接用null(这里的null被认为是varchar类型)。
9.7版本之前可以写cast (null as int)或者null||'',明确指定null的类型。

在SQL解析过程中,对于每一个token,系统首先要判断其种类(关键词、数据库对象名、常量),如果是常量的话,接着要判断常量的数据类型。在各种类型的常量里,null是很特殊的,其他类型都可以通过字面量直接确定其类型(1就是int,1.5就是decimal,'abc'就是varchar),唯独null不是。

早期版本的DB2是强类型的,使用null时必须明确指定类型,也不允许类型不同的变量之间进行比较。
举个例子:
SELECT
null+1
FROM
table (values 1) as tt
where
'123' = 123
这个语句在9.5版中执行会报错。
错误1:+只能用于两个数字类型变量之间,左边的null没有指定是数字类型。
错误2:'123'和123不是兼容的类型,不能直接比较。

必须要写成下面的样子才可以,是不是很麻烦?
SELECT
cast (null as int)+1
FROM
table (values 1) as tt
where
cast ('123' as int) =  123;

9.7版本之后在这方面有所改善,可以根据上下文决定null的数据类型(再不行的话就认为是varchar类型),也制定了一套不兼容数据类型之间进行运算时的类型转换策略。于是最上面的SQL语句可以直接执行。收起
银行 · 2015-05-05
浏览1065
Aaron_liuAaron_liu软件架构设计师国际商业机器大连分公司
回复 4# Aaron_liu    那样就没有NULL值的效果了显示全部
回复 4# Aaron_liu


   那样就没有NULL值的效果了收起
IT咨询服务 · 2014-04-24
浏览888
Aaron_liuAaron_liu软件架构设计师国际商业机器大连分公司
回复 2# leo_wyn    数据库版本是9.5的 试验了一下你的方法也报错 跟版本有关吗?显示全部
回复 2# leo_wyn


   数据库版本是9.5的 试验了一下你的方法也报错 跟版本有关吗?收起
IT咨询服务 · 2014-04-24
浏览926
amatoamato软件开发工程师恒隆兴
null加单引号'null'显示全部
null加单引号'null'收起
互联网服务 · 2014-04-24
浏览901
leo_wynleo_wyn商业智能工程师Security
你的数据库版本是9.5 以下吧?DB2 SQL 不支持直接使用 null ...........变通的方法: select (case when 1=1 then null end)  as c1, t as t1 from table显示全部
你的数据库版本是9.5 以下吧?

DB2 SQL 不支持直接使用 null ...........

变通的方法:

select (case when 1=1 then null end)  as c1, t as t1 from table收起
系统集成 · 2014-04-24
浏览897

提问者

Aaron_liu
软件架构设计师国际商业机器大连分公司
擅长领域: 大数据商业智能数据仓库

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2014-04-24
  • 关注会员:1 人
  • 问题浏览:10758
  • 最近回答:2015-05-05
  • X社区推广