问题:

您需要确定给定的年份是否为year年。

解:

解决此问题的方法有很多,其中包括确定该年是否存在2月29日或3月1日是该年的第61或62天的计算。

示例SELECT to_number(to_char(sysdate,'YYYY')) Year,

CASE

WHEN MOD(to_number(to_char(sysdate,'YYYY')),400) = 0 then 'Yes'

WHEN MOD(to_number(to_char(sysdate,'YYYY')),100) = 0 then 'No'

WHEN MOD(to_number(to_char(sysdate,'YYYY')),4) = 0 then 'Yes'

ELSE 'No'

END AS "Leap Year?"

FROM dual;

输出结果2020    Yes

显然,2020年是值得忘记的一年,也是飞跃的一年。让我们在例如2019年的非leap年尝试一下

示例SELECT '2019' Year,

CASE

WHEN MOD(2019,400) = 0 then 'Yes'

WHEN MOD(2019,100) = 0 then 'No'

WHEN MOD(2019,4) = 0 then 'Yes'

ELSE 'No'

END AS "Leap Year?"

FROM dual;

输出结果2019    No

该解决方案基于a年的标准定义,,年源自年数。标准算法指出,如果一年可被四整除,则为a年。但是,如果年份也可以被100整除,那么它将覆盖四分频规则,并且该年份不是it年。最后,如果年份也可以被400整除,那么它将覆盖所有其他规则,并且年份是a年。

在我们的SQL中,紧随其后的步骤序列带有CASE语句。

我们使用CASE语句来驱动leap年检测的主体。我们在case语句中反向应用the年算法,以利用CASE语句的行为。一旦找到匹配的规则,CASE语句就会中断。这意味着我们要首先评估最重要的规则,该规则优先于所有其他规则,那么年份是否可以除以400?如果那是错误的话,我们想评估下一个最严格的规则-除以100-依此类推。

我们使用MOD函数执行模数除法。首先,如果年份模数400没有余数,我们知道它可以被400整除,因此是a年。对于这种情况,我们返回字符串Leap Year,并且CASE语句结束。如果我们的年份模数400有余数,我们就知道它不是a年,然后继续对该年份除以100进行模数除法。如果没有余数,我们就知道该年份可以被100整除,因此不是。 a年。我们之所以知道这一点,是因为如果年份也可以被400整除,那么我们就不会评估CASE表达式的这一部分,因为CASE语句已经终止。

类似地,如果两个模数除法都有余数,我们就进入第三模数除法,即找到将年份除以四的余数。再说一次,如果没有余数,我们就知道前两个规则没有匹配,因此年份是is年。

至此,我们的CASE声明已经用尽,并且我们知道该年份与查找a年的任何明确规则都不匹配。

oracle 约束 年份,如何在Oracle中确定给定年份是否为Le年?相关推荐

  1. oracle ioc图标,如何在PPT中导入ico格式的图标

    如何在PPT中导入ico格式的图标以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何在PPT中导入ico格式的图标 在 ...

  2. oracle约束 1或0,Oracle笔记(十) 约束

    表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据做一些过滤的话,则可以通过约束完成,约束的主要功能是保证表中的数据合法性,按照约束的分类,一共有五种约束:非空约束.唯 ...

  3. oracle约束名最大长度,Oracle中表名的最大长度是多少?

    Oracle中表名的最大长度是多少? Oracle中表名和列名的最大长度是多少? 12个解决方案 246 votes 在Oracle 12.2及更高版本中,最大对象名长度为128个字节. 在Oracl ...

  4. oracle函数 授权,如何在Oracle中以普通用户身份运行dbms_crypto函数?

    我在Oracle中使用dbms_crypto.hash()函数时遇到问题. 我使用sqlplus作为"sys / passwd as sysdba"连接到数据库服务器, 然后我安装 ...

  5. oracle如何总计,如何在Oracle中产生分组小计和总计?

    问题陈述: 您想在Oracle中找出总数,小计和总计. 解决方案: Oracle ROLLUP函数使用从右到左将中间级别汇总到任何总计的方法在多个级别上执行分组.为了演示ROLLUP功能,我们将创建一 ...

  6. oracle显示人民币,如何在ORACLE中实现人民币大写的转换

    ORACLE在实现报表的功能是很强大的, 特别在现实的应用中会经常用到人民币大小写转换的问题, 在此我写个函数向大家简单介绍一下, 希望和大家一起探讨, 以便共同进步! 共同发展! 1. 函数DX_M ...

  7. oracle表格颜色,如何在oracle中使用光标更新特定颜色

    如果我正确理解您的要求,您希望通过1对所有行递增eks列,只要所有行总的eks*harga是在预算范围内.第一次通过后,如果仍有预算剩余,则要重新重复该过程. 我修改了,光标开放使用FOR循环,因为我 ...

  8. 在mysql中如何添加外键约束_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  9. oracle listagg支持,如何在Oracle查询上使用listagg上的条件

    我有3个表:table_A,table_B和table_C . Table_A具有主键,并由table_B中的外键引用 . Table_C具有由table_B中的外键引用的主键 . 设计是这样的: T ...

最新文章

  1. JS 使用html2canvas实现截图功能的问题记录和解决方案
  2. 数据结构学习工具总结
  3. 企业建立数据驱动决策该如何做?终于有大神总结全了
  4. boost::geometry::strategy::andoyer用法的测试程序
  5. 算法题3 二分查找法
  6. 8.21 :odd??:nth-of-type??
  7. mysql 查询时间之内_MySQL 查询时间段内的数据
  8. python强制跳出while循环_python如何跳出while循环
  9. 管理感悟:管理人员要不要技术好
  10. 图解Python机器学习pdf 中日双语 第1页
  11. 【微信小程序|组件库】一款清新且简洁的卡片样式
  12. 使用ntop监控局域网网络流量
  13. Win10 触摸屏 快捷键操作
  14. 计算机输入法不能切换用户登录,Win7输入法无法切换怎么办?
  15. Spring Cloud-Alibaba
  16. Dayjs 时间比较
  17. 关于碰到开机自动弹出图片查看器和右下角弹游戏各种广告的解决方法
  18. java毕业设计汽车售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. NRF24LE1 2.4g无线射频芯片介绍
  20. 2018-8-30-router的自我反思与总结三

热门文章

  1. linux 反弹 socket,反弹shell基础
  2. Linux 市场估值将超 70 亿美元,主要原因是安全与开源需求
  3. SQL索引管理器——用于SQL Server和Azure上的索引维护的免费GUI工具
  4. pycharm 运行odoo10出现ImportError: No module named win32service错误
  5. java枚举比较大小写_字符串与Java枚举的不区分大小写的匹配
  6. java 守护进程 linux_Java实现Linux下服务器程序的双守护进程
  7. linux物理硬盘和sd的对应关系_Linux物理存储结构以及磁盘划分
  8. python库声纹_针对亿级大规模声纹库检索,有哪些简洁、高效的算法?
  9. nginx防火墙在哪设置_Nginx 基本使用介绍
  10. pandas多列同时赋值_在pandas DataFram中减去多列并追加结果