oracle怎么限定年龄 oracle 出生日期算年龄

在oracle中,如何在指定条件下使用check约束 例如:男生年龄小于23岁,女生年龄小于21岁。

CREATE TABLE test_chk_case_when (

为项城等地区用户提供了全套网页设计制作服务,及项城网站建设行业解决方案。主营业务为网站建设、成都网站建设、项城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

id   int,

name varchar(10),

sex  varchar(4),

age  int

);

-- 男生年龄小于23岁,女生年龄小于21岁。

ALTER TABLE test_chk_case_when

ADD CONSTRAINT chk_test_sex_age

CHECK (

  CASE WHEN sex='男' AND age23 THEN 1

   WHEN sex='女' AND age21 THEN 1

   ELSE 0 END = 1

);

SQL INSERT INTO test_chk_case_when VALUES(1, '张三', '男', 22);

已创建 1 行。

SQL INSERT INTO test_chk_case_when VALUES(2, '李四', '男', 23);

INSERT INTO test_chk_case_when VALUES(2, '李四', '男', 23)

*

ERROR 位于第 1 行:

ORA-02290: 违反检查约束条件 (TEST.CHK_TEST_SEX_AGE)

SQL INSERT INTO test_chk_case_when VALUES(3, '王五', '女', 20);

已创建 1 行。

SQL INSERT INTO test_chk_case_when VALUES(4, '赵六', '女', 21);

INSERT INTO test_chk_case_when VALUES(4, '赵六', '女', 21)

*

ERROR 位于第 1 行:

ORA-02290: 违反检查约束条件 (TEST.CHK_TEST_SEX_AGE)

Oracle PL/SQL 计算年龄

根据出生日期查询年龄用的还挺多的。

简单分析一下,加入一个孩子五岁半了,那习惯认为他还是5岁。

用Oracle提供的months_between()函数,先获取出生日期和当前日期的月数,然后除以12向下取整:

使用的时候,将时间段替换成出生日期对应的字段即可。

如果,计算年龄用的次数非常多,最好写成自定义函数。

关于oracle数据库 sql的写法 我想写一个 关于年龄分组的sql 按1-30岁,31-50岁,50以上. 想分成这3个年龄段

SELECT COUNT(CASE WHEN AGE BETWEEN 1 AND 30 THEN 1 ELSE 0 END) AS 1-30岁

,COUNT(CASE WHEN AGE BETWEEN 31 AND 50 THEN 1 ELSE 0 END) AS 31-50岁

,COUNT(CASE WHEN AGE 50 THEN 1 ELSE 0 END) AS 50以上

FROM TABLE_NAME;

这个语句就可以做到~

Oracle 根据出生日期计算年龄

可用to_char函数将date类型转成字符类型。

如emp表中有如下数据:

如果计算生日的方法是当前日期的年份减去生日的年份,可用如下语句:

select ename,hiredate,to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy') from emp;

查询结果:

oracle 关于年龄计算问题?

用month_between做,应该会好一些。

select

当前日期,

出生日期,

trunc(months_between(当前日期,出生日期)/12) 年数,

trunc(months_between(当前日期,出生日期))%12 月数,

ceil(当前日期-add_month(出生日期,trunc(months_between(当前日期,出生日期))) 天数 from table

可能一些细微的地方还需要些调整,不过大体上应该差不多了。

最后那个ceil可能要分成两个case when的部分是

case when substr(to_char(当前日期,'yyyy-mm-dd'),-5) != substr(to_char(出生日期,'yyyy-mm-dd'),-5) then trunc(当前日期-add_month(出生日期,trunc(months_between(当前日期,出生日期)))

when substr(to_char(当前日期,'yyyy-mm-dd'),-5) = substr(to_char(出生日期,'yyyy-mm-dd'),-5) then 1 end 天数

我看了下你上面的两个例子,好像因为日期相等比较特殊,所以我尝试用ceil试试,如果不行那么就用下面这个,我估计差不多了,不过我可没有环境,只能是凭空想象,剩下的只能你自己去实验和修改了。

oracle根据出生日期算年龄

select floor(months_between(to_date(concat(extract(year from sysdate),'-10-31'),'YYYY-MM-DD'),to_date(生日的日期,'yyyy-mm-dd'))/12) from table_name

floor 向下取整

months_between 日期相差的月份数

concat字字符串连接

extract(year from sysdate) 返回当前日期的年份


当前文章:oracle怎么限定年龄 oracle 出生日期算年龄
文章起源:http://cdiso.cn/article/hhogcp.html

其他资讯