Datetime
SAP Sybase IQ 16:缺少 DATEROUND()
我只是想知道可能出了什麼問題
我試圖按季度對日期進行四捨五入。除了一些技巧之外,我還發現了 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');