上個禮拜被考了一個過濾出上個禮拜的訂單的sql
重點是用考卷寫
當時真的是很無力
沒有IDE沒有Internet
上個禮拜被考了一個過濾出上個禮拜的訂單的sql
重點是用考卷寫
當時真的是很無力
沒有IDE沒有Internet
最後只好寫下
select * from orders where orderDate between funcA() and funcB()
的答案,不過想必對方是不接受這種答案吧XD
回家痛定失痛要加強sql
先來補上這個問題的解法
CREATE FUNCTION [dbo].[LastWeek](@FirstDate CHAR(3))
RETURNS DATETIME
begin
declare @result DATETIME
select @result = (
SELECT
CASE @FirstDate
WHEN 'mon' THEN
CONVERT(NVARCHAR,DATEADD(DAY,- (datepart(WEEKDAY,GETDATE())+6),GETDATE()),112)
ELSE
CASE DATEPART(WEEKDAY,GETDATE())
WHEN 7 THEN
CONVERT(NVARCHAR,DATEADD(DAY,- datepart(WEEKDAY,GETDATE()+7),GETDATE()),112)
ELSE
CONVERT(NVARCHAR,DATEADD(DAY,- (datepart(WEEKDAY,GETDATE())+7),GETDATE()),112)
END
END
)
RETURN @result
END
呼叫時
SET DATEFIRST 1
SELECT dbo.LastWeek('mon')
SELECT dbo.LastWeek('sun')
測過沒問題
但不一定是最佳寫法