select
sum(case when
trunc(months_between(to_date(to_char(sysdate,'YYYYMMDD'),'YYYYMMDD'),to_date(date_in,'YYYYMMDD')))<=1
then 1
else 0
end
) from pe_person
我想筛选date_in时间不满一年的所有记录!这样做不行。求解,谢谢!
sum(case when
trunc(months_between(to_date(to_char(sysdate,'YYYYMMDD'),'YYYYMMDD'),to_date(date_in,'YYYYMMDD')))<=1
then 1
else 0
end
) from pe_person
我想筛选date_in时间不满一年的所有记录!这样做不行。求解,谢谢!
FROM pe_person;
-- 没看清楚,你的 date_in 是字符串类型的,表示日期?
-- 方式有二:
-- 其一:
SELECT SUM(case when sysdate-to_date(date_in,'YYYYMMDD') > trunc(sysdate,'yyyy')-trunc(add_months(sysdate,12),'yyyy') THEN 1 ELSE O END)
FROM pe_person;-- 或者
-- 其二:
SELECT SUN(CASE WHEN month_between(sysdate,to_date(date_in,'YYYYMMDD')) <12 THEN 0 ELSE 1 END)
FROM pe_person;-- 具体看你的一年是怎么定义啦?是指当前年的天数?还是根据 date_in的日期,超过12个月?
-- 方式有二:
-- 其一:
SELECT SUM(case when sysdate-to_date(date_in,'YYYYMMDD') > trunc(sysdate,'yyyy')-trunc(add_months(sysdate,12),'yyyy') THEN 1 ELSE O END)
FROM pe_person;-- 或者
-- 其二:
SELECT SUN(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <12 THEN 0 ELSE 1 END)
FROM pe_person;-- 具体看你的一年是怎么定义啦?是指当前年的天数?还是根据 date_in的日期,超过12个月?
SELECT SUN(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 0 ELSE 1 END)
FROM pe_person;-- 你的应该是正确的!
-- 那就这样:
SELECT SUM(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 0 ELSE 1 END)
FROM pe_person;-- 你的应该是正确的!
-- 以上查询是汇总date_in字段,时间超过一个月的所有记录行(看有多少行记录的 date_in超过一个月)
-- 以下查询是汇总date_in字段的时间没有超过一个月的所有记录行!
SELECT SUM(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 1 ELSE 0 END)
FROM pe_person;
-- 那就这样测试一下:
SELECT COUNT(*) AS ALL_Lines, -- 表中的所有记录
SUN(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 0 ELSE 1 END) as Less_oneMonth, -- date_in少于一个月的所有记录行
SUN(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 1 ELSE 0 END) as MoreThan_oneMonth, -- date_in大于等于一个月的所有记录行
FROM pe_person
WHERE date_in is not null; -- 排除时间字段为空的记录行(前提:你的时间字段的所有记录行的格式正确(即:能转换成时间类型)-- 查看 less_oneMonth + MoreThan_oneMonth = all_lines ?
SELECT COUNT(*) AS ALL_Lines, -- 表中的所有记录
SUM(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 0 ELSE 1 END) as Less_oneMonth, -- date_in少于一个月的所有记录行
SUM(CASE WHEN months_between(sysdate,to_date(date_in,'YYYYMMDD')) <1 THEN 1 ELSE 0 END) as MoreThan_oneMonth, -- date_in大于等于一个月的所有记录行
FROM pe_person
WHERE date_in is not null; -- 排除时间字段为空的记录行(前提:你的时间字段的所有记录行的格式正确(即:能转换成时间类型)-- 查看 less_oneMonth + MoreThan_oneMonth = all_lines ?
sum(case when months_between(sysdate,to_date(date_in,'YYYYMMDD'))<=1 then 1 else 0 end)
from pe_person