0
点赞
收藏
分享

微信扫一扫

第四十一章 SQL函数 DATE



文章目录


​​第四十一章 SQL函数 DATE​​​​大纲​​​​参数​​​​描述​​​​$HOROLOG 与 $ZTIMESTAMP​​​​ODBC日期字符串​​​​示例​​


第四十一章 SQL函数 DATE

接受时间戳并返回日期的函数。

大纲

DATE(timestamp)

参数

  • ​timestamp​​ - 指定时间戳或其他日期或日期和时间表示形式的表达式。

描述

​Date​​​接受时间戳表达式并返回日期。返回值的数据类型为​​Date​​​。这在功能上与​​CAST​​​相同(时间戳与日期相同)。它接受具有以下任何数据类型类(或其子类)的时间戳值:​​%Library.TimeStamp​​​、​​%Library.PosiTime​​​、​​%Library.Date​​​和​​%Library.Integer​​​或​​%Library.Numerical​​​(用于隐式逻辑日期,如​​+$HOROLOG​​​)。它还可以接受格式与​​%Library.TimeStamp​​​(有效的ODBC日期)兼容的​​%Library.String​​值。

无效的ODBC日期字符串的计算结果为零,与日期1840年12月31日相对应。时间戳可以只包含ODBC格式的日期或ODBC格式的日期和时间。虽然只换ODBC时间戳的日期部分,但会验证整个字符串。如果日期部分不完整、日期或时间部分包含超出范围的值(包括闰年计算),或者时间戳包含任何无效的格式字符或尾随字符,则ODBC时间戳验证失败。

空字符串(​​‘’​​​)参数返回0(​​1840年12月31日​​​)。​​NULL​​​参数返回​​NULL​​。

这个函数也可以从ObjectScript中使用​​DATE()​​方法调用来调用:

DHC-APP>  WRITE $SYSTEM.SQL.DATE("2018-02-23 12:37:45")
64702

$HOROLOG 与 $ZTIMESTAMP

​$HOROLOG​​和​​$ZTIMESTAMP​​返回字符串值。

当字符串被换为数字类型时,它总是返回一个数字值​​0​​(0)。0的 IRIS ​​DATE​​数据类型值是​​1840年12月31日​​。

因此,为了将​​$HOROLOG​​或​​$ZTIMESTAMP​​解释为当前日期,必须在它前面加上一个加号(​​+​​),这将强制进行数字解释。

如下示例所示:

SELECT DATE($HOROLOG),DATE($ZTIMESTAMP)

第四十一章 SQL函数 DATE_时间戳

SELECT DATE(+$HOROLOG),DATE(+$ZTIMESTAMP)

第四十一章 SQL函数 DATE_字符串_02

ODBC日期字符串

​DATE​​函数和​​$SYSTEM.SQL.DATE()​​方法都可以接受ODBC日期格式字符串。

它们验证输入字符串。

如果通过验证,则返回相应的日期。

如果验证失败,则返回0。

验证过程如下:


  • 必须对应于ODBC格式:​​yyyy-mm-dd hh:mm:ss.xx​​。
    整个字符串将被解析以获得正确的格式,而不仅仅是字符串的日期部分。
  • 字符串必须包含(至少)完整的日期:​​yyyy-mm-dd​​。
    前导零可以省略或包括。
    时间部分为可选,可以包括​​yyyy-mm-dd hh:​​。
  • 字符串的每个数字元素(包括日期部分和时间部分)都必须包含一个有效值。
    例如,月的取值范围为​​1 ~ 12​​(包括​​1 ~ 12​​)。
    日值不能超过指定月份的天数。
    闰年的天数是计算出来的。
  • 日期必须在​​%Library.TimeStamp​​日期范围内。最小日期为​​0001-01-01​​,最大日期为​​9999-12-31​​。

示例

以下示例采用数据类型​​%Library.TimeStamp​​的值:

/// d ##class(PHA.TEST.SQLCommand).Date()
ClassMethod Date()
{
s myquery = "SELECT {fn NOW} AS NowCol,DATE({fn NOW}) AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
if qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Date()
NowCol DateCol
2022-02-02 10:29:48 66142

1 Rows(s) Affected
ClassMethod Date1()
{
s myquery = "SELECT CURRENT_TIMESTAMP AS TSCol,DATE(CURRENT_TIMESTAMP) AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP> d ##class(PHA.TEST.SQLCommand).Date1()
TSCol DateCol
2022-02-02 10:30:40 66142

1 Rows(s) Affected
/// d ##class(PHA.TEST.SQLCommand).Date2()
ClassMethod Date2()
{
s myquery = "SELECT GETDATE() AS GetDateCol,DATE(GETDATE()) AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Date2()
GetDateCol DateCol
2022-02-02 10:31:31 66142

1 Rows(s) Affected

下面的示例采用​​%Library.TimeStamp​​格式的字符串值:

ClassMethod Date3()
{
s myquery = "SELECT '2018-02-22 13:14:23' AS DateStrCol,DATE('2018-02-22 13:14:23') AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Date3()
DateStrCol DateCol
2018-02-22 13:14:23 64701

1 Rows(s) Affected

以下示例采用以 IRIS逻辑格式表示日期的字符串值。为了将这些值正确换为​​%Library.Date​​​数据类型,该值必须以加号(​​+​​)为前缀,以强制进行数值计算:

ClassMethod Date4()
{
s myquery = "SELECT $H AS HoroCol,DATE(+$H) AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP> d ##class(PHA.TEST.SQLCommand).Date4()
HoroCol DateCol
66142,38015 66142

1 Rows(s) Affected
/// d ##class(PHA.TEST.SQLCommand).Date5()
ClassMethod Date5()
{
s myquery = "SELECT $ZTIMESTAMP AS TSCol,DATE(+$ZTIMESTAMP) AS DateCol"
s tStatement = ##class(%SQL.Statement).%New()
s qStatus = tStatement.%Prepare(myquery)
s rset = tStatement.%Execute()
d rset.%Display()
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Date5()
TSCol DateCol
66142,9262.279 66142

1 Rows(s) Affected


举报

相关推荐

0 条评论