首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL-SERVER季度函数

SQL-SERVER季度函数
EN

Stack Overflow用户
提问于 2016-09-23 09:44:07
回答 2查看 2K关注 0票数 1

我编写了一个SQL函数,将INT (月份值)转换为表示一年中第四季度的VARCHAR。

我的代码如下。

代码语言:javascript
复制
ALTER FUNCTION [sf_Quarters] (@DATE date)
Returns VARCHAR(4)
WITH EXECUTE AS CALLER
AS
BEGIN

 DECLARE @QUARTER VARCHAR(4) = '';
 DECLARE @DATEMONTH INT = DATEPART(MONTH, @DATE);

SELECT @QUARTER =
 CASE
     WHEN @DATEMONTH > 3 AND  @DATEMONTH < 7 THEN 'Q1'
     WHEN @DATEMONTH > 6 AND  @DATEMONTH < 10 THEN 'Q2'
     WHEN @DATEMONTH > 9 AND  @DATEMONTH <= 12 THEN 'Q3'
     WHEN @DATEMONTH > 0 AND  @DATEMONTH < 4 THEN 'Q4'
     ELSE NULL
 END
 RETURN @QUARTER
END

由于某种原因,当我传递这个函数--一个有效的日期对象(在我的测试中)--时,我只得到一个char 'Q‘返回。

代码语言:javascript
复制
DECLARE @DATE DATE = '20090405'
DECLARE @Qat VARCHAR

EXEC @Qat = sf_Quarters @DATE

SELECT @Qat

我意识到我可能在做一些愚蠢的事,破坏它。我只是不明白为什么它只返回第一个字符。

我还用函数(Current_Timestamp)替换了固定日期字符串,得到了相同的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 09:52:35

问题在第二部分,你要调用这个函数-

代码语言:javascript
复制
DECLARE @DATE DATE = '20090405'
DECLARE @Qat VARCHAR  -- change it to VARCHAR(4)
--varchar [ ( n | max ) ]
--When n is not specified in a data definition or variable declaration statement, the default length is 1
EXEC @Qat = sf_Quarters @DATE

SELECT @Qat

注释:遵循戈登建议调用函数的方式

票数 2
EN

Stack Overflow用户

发布于 2016-09-23 09:48:26

这似乎要简单得多:

代码语言:javascript
复制
select 'Q' + datename(quarter, dateadd(month, -3, @date))

至于您的问题,调用函数的方法是使用SELECT

代码语言:javascript
复制
SELECT @Qat = sf_Quarters(@DATE);

您正在调用该函数,就好像它是一个存储过程。我很惊讶那能起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39657642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档