[20241222]关于日期输出格式问题.txt

[20241222]关于日期输出格式问题.txt

–//https://connor-mcdonald.com/ 网站写了一系列相关blog,命名为Kris Kringle系列。

–//其中链接提到的例子https://connor-mcdonald.com/2024/12/21/kris-kringle-the-database-what-day-is-it/

–//重复测试:

1.环境:

SCOTT@book01p> @ ver2

==============================

PORT_STRING                   : x86_64/Linux 2.4.xx

VERSION                       : 21.0.0.0.0

BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 – Production

BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 – Production

Version 21.3.0.0.0

BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 – Production

CON_ID                        : 0

PL/SQL procedure successfully completed.

2.测试:

SCOTT@book01p> select ‘~’||to_char(sysdate,’DAY’)||’~’ from dual;

‘~’||TO_CHAR(SY

—————

~SUNDAY   ~

–//实际上输出是char类型,注意结尾有空格,占用9个字符。规避后面的空格要加入FM。

SCOTT@book01p> select ‘~’||to_char(sysdate,’FMDAY’)||’~’ from dual;

‘~’||TO_CHAR(SY

—————

~SUNDAY~

–//实际上在输出格式上还有一些细节,看下面的例子:

$ echo {D,d}{A,a}{Y,y}

DAY DAy DaY Day dAY dAy daY day

$ echo set feed off head off ; echo -e {D,d}{A,a}{Y,y}”\n” | xargs -IQ echo “select ‘Q’,to_char(sysdate,’Q’) from dual ;”

set feed off head off

select ‘DAY’,to_char(sysdate,’DAY’) from dual ;

select ‘DAy’,to_char(sysdate,’DAy’) from dual ;

select ‘DaY’,to_char(sysdate,’DaY’) from dual ;

select ‘Day’,to_char(sysdate,’Day’) from dual ;

select ‘dAY’,to_char(sysdate,’dAY’) from dual ;

select ‘dAy’,to_char(sysdate,’dAy’) from dual ;

select ‘daY’,to_char(sysdate,’daY’) from dual ;

select ‘day’,to_char(sysdate,’day’) from dual ;

$ (echo set feed off head off ; echo -e {D,d}{A,a}{Y,y}”\n” | xargs -IQ echo “select ‘Q’ str ,to_char(sysdate,’Q’) to_c from dual ;”)| sqlplus -s -l / as sysdba | sed ‘/^$/d’

DAY MONDAY

DAy MONDAY

DaY Monday

Day Monday

dAY monday

dAy monday

daY monday

day monday

–//自己可以总结其中的差别:

–//1.格式前面2个字符大写的,输出全部大写。

–//2.格式第1个字符大写的,第2个小写的,输出第1个字符大写,其他小写。

–//3.格式第1个字符小写的,输出全部小写。

–//这些大概属于英语的习惯用法。

3.画外:

–//之所以提及这些问题,最近正好在优化一个项目,我发现写代码看谓词出现类型如下情况:

TO_CHAR (SCHEDULED_DATE_TIME, ‘yyyyMMdd’) = TO_CHAR (SYSDATE, ‘yyyyMMdd’)

OR (START_DATE_TIME >= :startTime AND START_DATE_TIME <= :endTime)

–//视乎是对方的一种编程风格,T大写视乎很容易看出前面start,end是否写错。

–//前面的MM例子也是这样,也许这样容易看清前面的y有4个。

> @ sql_id a5a47dnwfd100

— SQL_ID = a5a47dnwfd100 come from shared pool

SELECT d.label as dept,substr(t.RECORDDATE,0,10) as 日期,count (*) AS 人数

 FROM TEMPERATURE t  left join s_departments d on d.CODE=t.dept

 where to_date(t.RECORDDATE,’yyyy-MM-dd hh24:mi:ss’)+7 >sysdate and value >=37.3

 GROUP by d.label,substr(t.RECORDDATE,0,10)

 order by substr(t.RECORDDATE,0,10) desc;

–//我不知道为什么,大部分代码出现的格式中间的MM都是选择大写,感觉很怪异,当然也许是编写者的一个风格。

–//不过关于谓词使用函数,这些已经讲了许多次,还是有人这样写,当然建立函数索引问题就可以解决(最后1个不行),看着这样开发

–//人员不不知道是同情还是鄙视,如果没人指出,写一辈子代码还是这样,那真是一种悲哀!!

来源链接:https://www.cnblogs.com/lfree/p/18625052

© 版权声明
THE END
支持一下吧
点赞12 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容