另一种方式是Select Case

时间:2014-01-26 16:09:25

标签: sql tsql

有没有办法在t-sql中使用Case语句? 例如:

select case day
       when 0
       then 'sun'
       when 1
       then 'mon' ...
       else 'sat'
       end as dayName
from   table

现在我想知道比C#中的struct或简单函数或字典中的“case statement”更好的方法!您可以发送密钥并使用值成员而不是选择大小写。

5 个答案:

答案 0 :(得分:2)

你在寻求另一种方式。这是另一种方式:

select left(datename(dw, dateadd(day, [day], '2014-01-25')), 3)

常数'2014-01-25'只是你最喜欢的星期六。

我不是主张使用它。我认为case声明的意图更清晰。

答案 1 :(得分:2)

这是另一种方式......

declare @day int
set @day = 1
select SUBSTRING('sunmontuewedthufrisat',(@day*3)+1,3) as dayName

答案 2 :(得分:1)

如果我正确地理解了你的问题......那么是的,还有其他方法。 它们是否更好取决于背景!

字典是具有排序索引的集合。在此示例中,#DayTable扮演该角色。

如果您询问条件编程构造,那么在SELECT语句中,我认为答案是否定的,在SQL Server 2012之前有IIF() BOL Ref

这与IF控制逻辑流程略有不同 - 在SELECT语句之外。

IF OBJECT_ID('tempdb..#DayTable')IS NOT NULL DROP TABLE #DayTable
IF OBJECT_ID('tempdb..#ArbEvent')IS NOT NULL DROP TABLE #ArbEvent

CREATE TABLE #DayTable (DayID INT, DayTextName VARCHAR(30))
INSERT INTO #DayTable
(DayID, DayTextName)
VALUES
(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednseday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')

CREATE TABLE #ArbEvent (EventName VARCHAR(30), DayID INT)
INSERT INTO #ArbEvent
(EventName, DayID)
VALUES
('John''s Birthday', 1), ('Susan''s Funeral', 2), ('Pick Jessica up', 6)

SELECT   AE.EventName
        ,AE.DayID
        ,DT.DayTextName 
FROM #ArbEvent  AE
JOIN #DayTable  DT  ON AE.DayID = DT.DayID 

答案 3 :(得分:0)

是的,只需使用表格或内嵌视图。

select dayname
from   table t
join   ( select 1 nr
         ,      'mon' dayname
         union
         select 2
         ,      'tue'
       ) v
on     t.day = v.nr

答案 4 :(得分:0)

我认为我们必须声明一个标量值函数并在查询中使用它,如下所示:

CREATE FUNCTION fcDayName
(
   @DayNo tinyint
)
RETURNS nvarchar(20)
AS
BEGIN
-- Declare the return variable here
DECLARE @day nvarchar(20)

-- Add the T-SQL statements to compute the return value here
set @day = (SELECT case @DayNo when 1 then 'Mon' when 2 then 'Tue' when 3 then 'Wed' ... end as d)

-- Return the result of the function
RETURN @day

END

并使用它:

 Select Code, dbo.fcDayName(Day) AS Day, S_Bank From Table