Published on InterSystems Developer Community (https://community.intersystems.com)

主页 > 第四十八章 SQL函数 DAYOFMONTH

文章
姚 鑫 · 二月 8, 2022 阅读大约需 3 分钟

第四十八章 SQL函数 DAYOFMONTH

第四十八章 SQL函数 DAYOFMONTH

返回日期表达式的月份日期的日期函数。

大纲

{fn DAYOFMONTH(date-expression)}

参数

  • date-expression - 要从中返回月值日期的日期或时间戳表达式。作为列名、另一个标量函数的结果或日期或时间戳文字的表达式。

描述

DAYOFMONTH以1到31之间的整数形式返回每月的第几天。日期表达式可以是日期整数、$HOROLOG或$ZTIMESTAMP值、ODBC格式的日期字符串或时间戳。

日期表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数)或数据类型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)。

TIMESTAMP或$HOROLOG字符串的时间部分不计算,可以省略。

DAYOFMONTH和DAY函数在功能上是相同的。

也可以使用DAYOFMONTH()方法调用从ObjectScript调用此函数:

DHC-APP>  w $SYSTEM.SQL.DAYOFMONTH("2018-02-25")
25

Timestamp date-expression

时间戳字符串的日(Dd)部分应该是介于1到31之间的整数。但是,不会对用户提供的值进行范围检查。按照指定的方式返回大于31的数字和分数。由于(-)用作分隔符,因此不支持负数。输入上的前导零是可选的;输出上不显示前导零。

当日期部分为‘0’、‘00’或非数字值时,DAYOFMONTH返回NULL。如果完全省略日期字符串的日期部分(‘yyyy-mm hh:mm:ss’),或者如果没有提供日期表达式,也会返回NULL。

可以使用以下SQL标量函数返回日期时间字符串的元素:年、月、DAYOFMONTH(或日)、小时、分钟、秒。使用DATEPART或DATENAME函数可以返回相同的元素。DATEPART和DATENAME对日期值执行值和范围检查。

$HOROLOG日期表达式

在计算$HOROLOG值的月份日期时,DAYOFMONTH会计算闰年差异,包括世纪日调整:2000年是闰年,1900和2100不是闰年。

DAYOFMONTH可以将1840年12月31日之前的日期表达式值处理为负整数。下面的示例显示了这一点:

SELECT {fn DAYOFMONTH(-306)} AS DayOfMonthFeb,    /* February 29, 1840 */
       {fn DAYOFMONTH(-305)} AS DayOfMonthMar,    /* March 1, 1840     */
       {fn DAYOFMONTH(-127410)} AS DayOfMonthFeb  /* February 29, 1492 */

29  1   29

LAST_DAY函数返回指定日期的月份最后一天的日期(以$HOROLOG格式表示)。

示例

以下示例返回数字25,因为指定的日期是该月的第25天:

SELECT {fn DAYOFMONTH('2018-02-25')} AS DayNumTS,
       {fn DAYOFMONTH(64704)} AS DayNumH

25  25

下面的示例还返回数字25,表示该月中的某一天。省略年份,但分隔符(-)用作占位符:

SELECT {fn DAYOFMONTH('-02-25 11:45:32')} AS DayNum

25

以下示例返回<null>:

SELECT{fn DAYOFMONTH('2018-02-00 11:45:32')} AS DayNum
SELECT {fn DAYOFMONTH('2018-02 11:45:32')} AS DayNum
SELECT {fn DAYOFMONTH('11:45:32')} AS DayNum

以下DAYOFMONTH示例均返回当月的当前日期:

SELECT {fn DAYOFMONTH({fn NOW()})} AS DoM_Now,
       {fn DAYOFMONTH(CURRENT_DATE)} AS DoM_CurrD,
       {fn DAYOFMONTH(CURRENT_TIMESTAMP)} AS DoM_CurrTS,
       {fn DAYOFMONTH($HOROLOG)} AS DoM_Horolog,
       {fn DAYOFMONTH($ZTIMESTAMP)} AS DoM_ZTS

8   8   8   8   8

请注意,$ZTIMESTAMP返回协调世界时(UTC)。其他时间表达式值返回本地时间。这可能会影响DAYOFMONTH值。

下面的示例显示了前导零被取消。它返回长度为1或2的值,具体取决于月值的日期:


SELECT LENGTH({fn DAYOFMONTH('2018-02-05')}), LENGTH({fn DAYOFMONTH('2018-02-15')}) 1 2
#SQL #Caché

源 URL:https://cn.community.intersystems.com/post/%E7%AC%AC%E5%9B%9B%E5%8D%81%E5%85%AB%E7%AB%A0-sql%E5%87%BD%E6%95%B0-dayofmonth