Oracle数据库中对2位年份的处理(即日期格式中YY和RR的区别)_Alive~的博客-程序员宅基地

在学习TO_DATE函数时TO_DATE(char[,fmt [, nlsparams]])中char指要转换的字符串,
fmt指将char转换为的格式,其中这个格式既可以支持4位数字的年份,也可以支持2位数字的年份。那么问题来了我给一个2位数字的年份,系统是如何判定具体的年份呢?

eg 1:

SELECT TO_CHAR(TO_DATE('50-07-12','YY-MM-DD'),'YYYY-MM-DD') FROM dual

在这里插入图片描述
eg 2:

SELECT TO_CHAR(TO_DATE('50-07-12','RR-MM-DD'),'YYYY-MM-DD') FROM dual

在这里插入图片描述
从以上两个案例中可以看出同样给的“50-07-12”,当使用格式:YY-MM-DD时,判定的具体年份为2050年;当使用格式:RR-MM-DD时,判定的具体年份为1950年,这是为什么呢?有什么根据呢?

原因解析:

  • YY格式:

当采用YY格式时,只提供2位数字的年份,会默认该世纪与数据库服务器所处的世纪形同。简单来说,因为现在是21世纪,当使用格式:YY-MM-DD时,给个“50-07-12",会默认这是21世纪,所以输出的是2050年。

  • RR格式
    当采用RR格式时,只提供2位数字的年份,那么年份中的前两位数字由系统所处世纪和用户输入的后两位年份共同决定。如下表所示:
    在这里插入图片描述

下面举几个例子具体说一下以RR格式怎么判定:

eg1:
当给定2位数字的年份为50时:
在这里插入图片描述

接下来随便试个2位数字的年份来验证一下以上结论:

  • 给定年份为“49-08-12”时,以格式:RR-MM-DD
    在这里插入图片描述
    同理,在上图表格中按上面所述方法找交集,所以以这种求交集的方式判定“49-08-12”具体是2049年08月12日

下面通过程序验证:

SELECT TO_CHAR(TO_DATE('49-08-12','RR-MM-DD'),'YYYY-MM-DD') FROM dual

在这里插入图片描述
️ 完美验证!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43437465/article/details/90679458

智能推荐

面试题:实现数组扁平化_weixin_34056162的博客-程序员宅基地

什么是数组扁平化数组扁平化是指将一个多维数组变为一维数组reduce 方法实现reduce 本身就是一个迭代循环器,通常用于累加,所以根据这一特点有以下:const arr1 = [1,[4,6],[8,3,[19,38]]]function flatten(arr) { return arr.reduce((result, item)=> { return re...

JfreeChart用法总结_shiyan0634的博客-程序员宅基地

一、简介 WW 的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用 HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目

微信扫码支付 模式一 (JSAPI)_ouyuyao的博客-程序员宅基地

这个微信支付是静态二维码支付,就是店面贴着一个二维码,让消费者自己扫自己输入金额,自己发起支付的支付方式。要准备的东西比较麻烦: 1、到微信公众号平台设置Oauth2的网页验证域名(用于获取code,code用于拿到发起支付的openId),格式是www.xxxx.com/file1/file2/,不需要https:// 要精确到发起支付页面的当前路径 2、配置Oauth2网页验证域名的时候,需

一文梳理金融风控建模全流程(Python)_风度78的博客-程序员宅基地

一、信贷风控简介 信贷风控是数据挖掘算法最成功的应用之一,这在于金融信贷行业的数据量很充足,需求场景清晰及丰富。信贷风控简单来说就是判断一个人借了钱后面(如下个月的还款日)会不会按期还钱。更专业来说,信贷风控是还款能力及还款意愿的综合考量,根据这预先的判断为信任依据进行放贷,以此大大提高了金融业务效率。与其他机器学习的工业场景不同,金融是极其厌恶风险的领域,其特殊性在于非...

lambda引入时 Error:Execution failed for task ':test:transformClassesWithRetrolambdaForDeb_这是一个秘密的博客-程序员宅基地

在引入tatarka:gradle-retrolambda时报错Error:Execution failed for task ':test:transformClassesWithRetrolambdaForDeb 将版本改为3.7.0即可(我引入的是3.5.0错了)classpath 'me.tatarka:gradle-retrolambda:3.7.0'...

【python】清空jupyter notebook所有输出的命令_嘤桃子的博客-程序员宅基地_jupyter 清空输出

在跑六百万数据集时加了print,导致输出的内容太多,不仅跑了几个小时,还让ipynb文件非常大根本打不开!!清空jupyter notebook输出的命令:jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace xxxx.ipynb如果想把清空所有输出后的源代码文件另存为,命令为:jupyter nbconvert --ClearOutputPreprocessor.enabled=True --to notebook

随便推点

Latex002 | 详细教程:LaTeX 编译器哪个好?——如何在 Visual Studio Code 中全流程编写 LaTeX(上篇)_爱学习的Allan的博客-程序员宅基地_latex编译器

你是否在编写 LaTeX 过程中遇到了编译器“不给力”,无法自动补全、缩进等问题?本文比较了流行的 LaTeX 的编译器,并简要分析了其优势与不足,最终给出解决方案。

16 Java数组--数组的定义、声明和创建_一起加油(ง •̀_•́)ง的博客-程序员宅基地

数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。数组的声明首先必须声明数组变量,才能在程序中使用数组dataType[] arrayRefVar; //首选声明方法或dataType arrayRefVar[];Java语言使用new操作符来创建数组dataType[] arrayRefVar = new dataType[arraySize];

Image Smoothing via L0 Gradient Minimization基于C++的代码实现_铿锵的玫瑰的博客-程序员宅基地

论文解析图像梯度L0范数最小化图像梯度最小化平滑---一维信号图像梯度最小化平滑---二维图像源代码//实现L0测度平滑Mat L0Smoothing(Mat & image8UC3, double lambda = 2e-2, double kappa = 2.0){ //将输入的图片转换为三通道的Double类型,按原来的像素值进行1...