# 第五十章 SQL函数 DAYOFWEEK `Date`函数,它返回日期表达式的整型日期。 # 参数 - `date-expression` - 日期表达式,它是列名、另一个标量函数的结果或日期或时间戳文字。 # 描述 `DAYOFYEAR`返回一个介于1到366之间的整数,该整数对应于给定日期表达式的一年中的第几天。`DAYOFYAR`计算闰年日期。 根据日期整数、`$HOROLOG`或`$ZTIMESTAMP`值、ODBC格式日期字符串或时间戳计算一年中的日期。 日期表达式时间戳可以是数据类型`%Library.PosiTime`(编码的64位有符号整数)或数据类型`%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)`。 时间戳的时间部分不计算,可以省略。 在计算`$HOROLOG`值的月份日期时,`DAYOFYAR`会计算闰年差异,包括世纪日调整:2000年是闰年,1900和2100不是闰年。 `DAYOFYEAR`可以将1840年12月31日之前的日期表达式值处理为负整数。下面的示例显示了这一点: ```sql SELECT {fn DAYOFYEAR(-306)} AS LastDayFeb, {fn DAYOFYEAR(-305)} AS FirstDayMar 60 61 ``` 最早有效日期表达式为`-672045(0001-01)`。 可以使用`DATEPART`或`DATENAME`函数返回当天计数。`DATEPART`和`DATENAME`对日期表达式执行值和范围检查。 也可以使用`DAYOFYEAR()`方法调用从ObjectScript调用此函数: ```sql $SYSTEM.SQL.Functions.DAYOFYEAR(date-expression) ``` # 示例 以下示例都返回数字`64`,因为日期表达式(`2016年3月4日`)中的日期是一年中的第`64`天(自动计算闰年日期): ```sql SELECT {fn DAYOFYEAR('2016-03-04 12:45:37')} AS DayCount 64 ``` ```sql SELECT {fn DAYOFYEAR(63981)} AS DayCount 64 ``` 以下示例均返回当天的计数: ```sql SELECT {fn DAYOFYEAR({fn NOW()})} AS DNumNow, {fn DAYOFYEAR(CURRENT_DATE)} AS DNumCurrD, {fn DAYOFYEAR(CURRENT_TIMESTAMP)} AS DNumCurrTS, {fn DAYOFYEAR($HOROLOG)} AS DNumHorolog, {fn DAYOFYEAR($ZTIMESTAMP)} AS DNumZTS 42 42 42 42 42 ``` 请注意,`$ZTIMESTAMP`返回协调世界时(`UTC`)。其他时间表达式值返回本地时间。这可能会影响`DAYOFYAR`值。 下面的示例使用子查询返回按每个人的生日日期排序的员工记录: ```sql SELECT Name,DOB FROM (SELECT Name,DOB,{fn DAYOFYEAR(DOB)} AS BDay FROM Sample.Employee) ORDER BY BDay ``` ![image](8BC8B59E8E934C0C9757C629026DD1C9)