我已經寫了一個SQL函數來將一個INT(月份值)變成一個VARCHAR,代表一年的季度。SQL服務器四分之一函數
我的代碼如下。
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
出於某種原因,當我把這個函數傳遞一個有效的日期對象(在我的測試用例)我只得到單個字符「Q」退了出去。
DECLARE @DATE DATE = '20090405'
DECLARE @Qat VARCHAR
EXEC @Qat = sf_Quarters @DATE
SELECT @Qat
我意識到我可能做了一些愚蠢的事情,打破它。我只是不明白爲什麼它只返回CHARS的第一個。
我也用我的固定日期字符串替換函數(Current_Timestamp)並得到了相同的結果。
選擇@Qat = dbo.sf_Quarters(順便@ DATE) – BhatiaAshish
DECLARE @Qat VARCHAR - 我記得它只聲明瞭一個字符,這就是爲什麼你只能得到'Q' –