我想找出那些"rsp_ver“以2.0或更多开头而不是1.0的情况。我想我可以在where子句中使用一个条件来找出子查询找到的rsp_ver代码超过"1.0“的in:
select
trim(INS.fst_name) || ' ' || Trim(INS.lst_name) as name,
IDS.rin,
RSP.unit_id,
RSP.indv_id,
RSP.rsp_id,
RSP.rsp_sqnm,
RSP.rsp_ver,
cast(RSP.post_ts as char(16)) as Post,
RSP.post_audit_id
from
dhsdb2.wvs_rsp RSP
join dhsdb2.indv_name_srch INS on RSP.indv_id = INS.indv_id
join dhsdb2.indv_demg_srch IDS on RSP.indv_id = IDS.indv_id
where
RSP.indv_id in
(select
SRSP.indv_id
from
dhsdb2.wvs_rsp SRSP
where
SRSP.indv_id = RSP.indv_id and
SRSP.rsp_ver > '1.0')
and rsp.clse_ts is null
order by
RSP.rsp_ver;当然,这并不起作用。然后我认为我需要这个内部查询来实现min函数,但是我运行了int
发布于 2013-04-16 01:55:14
假设rsp_ver始终采用主要Version.Other版本信息的格式,您可以在where子句中替换嵌套的select:
RSP.indv_id in
(select
SRSP.indv_id
from
dhsdb2.wvs_rsp SRSP
where
SRSP.indv_id = RSP.indv_id and
SRSP.rsp_ver > '1.0')具有以下功能:
CAST(SUBSTRING(RSP.rsp_ver, 1, CHARINDEX('.', RSP.rsp_ver)-1) AS INT) >= 2这将从rsp_var列中获取主版本部分,将其转换为INT,然后仅返回主版本为2或更高的行。
当您的版本号包含多个小数(即2.0.1)时,这比简单地将rsp_ver转换为数字值更有好处。缺点是它只检查当前形式的主要版本。
如果需要更细粒度的过滤,可以创建一个Common Table Expression,它从rsp_ver列和indv_id中选择不同的版本部分,然后连接该查询。
发布于 2013-04-16 01:46:53
从Where子句中删除',以便将列作为number而不是字符串进行比较
select
trim(INS.fst_name) || ' ' || Trim(INS.lst_name) as name,
IDS.rin,
RSP.unit_id,
RSP.indv_id,
RSP.rsp_id,
RSP.rsp_sqnm,
RSP.rsp_ver,
cast(RSP.post_ts as char(16)) as Post,
RSP.post_audit_id
from
dhsdb2.wvs_rsp RSP
join dhsdb2.indv_name_srch INS on RSP.indv_id = INS.indv_id
join dhsdb2.indv_demg_srch IDS on RSP.indv_id = IDS.indv_id
where
RSP.indv_id in
(select
SRSP.indv_id
from
dhsdb2.wvs_rsp SRSP
where
DRSP.indv_id = RSP.indv_id and
SRSP.rsp_ver > 1.0)
and rsp.clse_ts is null
order by
RSP.rsp_ver;https://stackoverflow.com/questions/16021399
复制相似问题