有没有办法在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”更好的方法!您可以发送密钥并使用值成员而不是选择大小写。
答案 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