Datetime

SAP Sybase IQ 16:缺少 DATEROUND()

  • February 13, 2015

我只是想知道可能出了什麼問題

我試圖按季度對日期進行四捨五入。除了一些技巧之外,我還發現了 DATEROUND 功能,我正在考慮基於文件的功能。所以我建立了一個小測試:

SELECT DATEROUND(qq, now());

失敗了

未實現功能“dateround”。

這是文件中的錯誤還是我只是錯過了啟用某些功能?或者是否有另一種簡單的解決方案,沒有用於獲取此功能的案例構造?

根據這裡的答案,我有了一個想法並為我解決了一些不同的問題。我需要它在 select 語句的列列表中。$date代表我表中的日期列。

--SELECT .... 
DATEADD(
   quarter,
   datepart(
       quarter,
       $date)-1,
   dateadd(year,
       datepart(year,
           $date)-1000,
           '1000-01-01 00:00:00')
   )
--- FROM .... 

似乎現在可以工作了。

使用 T-SQL 兼容DATEPART構造獲取季度,並從中構造日期。

例如在 SQL Server 上使用 T-SQL:

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(4), DATEPART(YEAR, GETDATE())) + 
   STUFF(
       '00'
       , 3 - (LEN(1+(DATEPART(QUARTER, GETDATE()) * 3) - 3))
       , LEN(1+(DATEPART(QUARTER, GETDATE()) * 3) - 3)
       , 1+(DATEPART(QUARTER, GETDATE()) * 3) - 3
       ) +
   '01');

返回2015-01-01 00:00:00.000,2015 年目前季度的開始。

根據 Sybase IQ 15 的文件;您需要將上面的內容修改為類似(我無法檢查語法,因為我在這台機器上沒有 Sybase IQ):

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(4), DATEPART(YEAR, GETDATE())) + 
   STUFF(
       '00'
       , 3 - (LENGTH(1+(DATEPART(QUARTER, GETDATE()) * 3) - 3))
       , LENGTH(1+(DATEPART(QUARTER, GETDATE()) * 3) - 3)
       , 1+(DATEPART(QUARTER, GETDATE()) * 3) - 3
       ) +
   '01');

有關詳細資訊,請參見http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1510/html/iqrefbb/X315942.htm

引用自:https://dba.stackexchange.com/questions/89728