frlan Asked: 2015-01-21 08:57:03 +0800 CST2015-01-21 08:57:03 +0800 CST 2015-01-21 08:57:03 +0800 CST SAP Sybase IQ 16:缺少 DATEROUND() 772 我只是想知道可能出了什么问题 我试图按季度四舍五入日期。除了一些 hack 之外,我还发现了 DATEROUND 函数,我认为它基于文档能够做到这一点。所以我建立了一个小测试: SELECT DATEROUND(qq, now()); 失败了 功能“dateround”未实现。 这是文档中的错误还是我只是错过了启用某些东西?或者是否有另一个没有案例构造的简单解决方案来获得此功能? datetime sybaseiq 2 个回答 Voted Hannah Vernon 2015-01-21T10:49:14+08:002015-01-21T10:49:14+08:00 使用 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。 Best Answer frlan 2015-02-14T06:47:29+08:002015-02-14T06:47:29+08:00 基于这里的答案,我有了一个想法并为我解决了这个问题。我在 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:
回报
2015-01-01 00:00:00.000
,2015 年当前季度的开始。根据 Sybase IQ 15 的文档;您需要将上面的内容修改为类似的内容(我无法检查语法,因为我在这台机器上没有 Sybase IQ):
有关详细信息,请参见http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1510/html/iqrefbb/X315942.htm。
基于这里的答案,我有了一个想法并为我解决了这个问题。我在 select 语句的列列表中需要它。
$date
代表我表中的日期列。似乎现在可以工作了。