SQL Server中为DATE类型变量@DATA按逻辑赋值遇问题,求正确写法
解决SQL Server变量赋值问题
你的代码问题出在SET @DATA后未指定赋值内容,且分支里用SELECT仅返回结果,没有将值存入变量。以下是两种修正方案:
方案一:IF ELSE直接赋值
DECLARE @DATA DATE IF (DATEPART(DW, GETDATE()) - 1) = 1 SET @DATA = CAST(GETDATE() - 3 AS DATE) ELSE SET @DATA = CAST(GETDATE() - 1 AS DATE) -- 后续查询可直接使用@DATA,比如: -- SELECT * FROM YourTable WHERE YourDateColumn = @DATA
方案二:用CASE表达式简化写法(更简洁)
-- 方式1:先声明再赋值 DECLARE @DATA DATE SET @DATA = CASE WHEN DATEPART(DW, GETDATE()) - 1 = 1 THEN CAST(GETDATE() - 3 AS DATE) ELSE CAST(GETDATE() - 1 AS DATE) END -- 方式2:声明时直接赋值 DECLARE @DATA DATE = CASE WHEN DATEPART(DW, GETDATE()) - 1 = 1 THEN CAST(GETDATE() - 3 AS DATE) ELSE CAST(GETDATE() - 1 AS DATE) END
注意:DATEPART(DW, GETDATE())的返回值依赖SQL Server的DATEFIRST配置(默认周日为1),若你的环境DATEFIRST不是默认值,需调整判断逻辑。
内容的提问来源于stack exchange,提问作者Angelo_C_Rossi
相关产品推荐
相关产品推荐

