如果SQL Server中的日期是周末(周六-周日),则返回星期五
我正在SQL Server中将历史数据存储为日期类型2019-10-10。如果是星期六或星期天,我想检查并返回星期五如果SQL Server中的日期是周末(周六-周日),则返回星期五,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我正在SQL Server中将历史数据存储为日期类型2019-10-10。如果是星期六或星期天,我想检查并返回星期五 周末没有数据。这就是为什么如果是周末,我想获取周五的数据。天数等于sql server中的数字: 7 -> Sunday 1 -> Monday 2 -> Tuesday 3 -> Wednesday 4 -> Thursday 5 -> Friday 6 -> Saturday DATEPARTDW,GETDATE以数字形式提供当前日
周末没有数据。这就是为什么如果是周末,我想获取周五的数据。天数等于sql server中的数字:
7 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday
DATEPARTDW,GETDATE以数字形式提供当前日期
在IF和ms sql server中使用它
例如:
如果一天是星期六,用-1表示星期五
IF(DATEPART(DW, GETDATE()) = 6)
SELECT * FROM table WHERE date=dateadd(day, -1, cast(GETDATE() as date))
天数等于sql server中的数字:
7 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday
DATEPARTDW,GETDATE以数字形式提供当前日期
在IF和ms sql server中使用它
例如:
如果一天是星期六,用-1表示星期五
IF(DATEPART(DW, GETDATE()) = 6)
SELECT * FROM table WHERE date=dateadd(day, -1, cast(GETDATE() as date))
一个选项是将Choose与DateAdd配合使用
范例
范例
返回
一个选项是将Choose与DateAdd配合使用
范例
范例
返回
最安全的方法可能是使用星期几的格式:
select (case format(col, 'ddd', 'en-us')
when 'Sat' then dateadd(day, -1, col)
when 'Sun' then dateadd(day, -2, col)
else col
end)
因为format采用区域性参数,所以无论可能影响datename返回的日期格式或语言的设置如何,该方法都有效。最安全的方法可能是使用星期几的格式:
select (case format(col, 'ddd', 'en-us')
when 'Sat' then dateadd(day, -1, col)
when 'Sun' then dateadd(day, -2, col)
else col
end)
因为format采用区域性参数,所以无论可能影响datename返回的日期格式或语言的设置如何,该选项都有效。希望这对您有所帮助:
为测试创建表:
create table HistorySave(Datum date);
插入一些测试值:
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-05', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-04', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-03', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-09', 102));
检查插入数据中的天数
SELECT DATENAME(DW, CONVERT(DATETIME, DATUM, 102)) FROM HistorySave;
更新前检查数据:
select * from HistorySave;
更新声明:
UPDATE HistorySave
SET Datum =
CASE
WHEN DATENAME(DW, CONVERT(DATETIME, Datum, 102)) = 'Saturday'
THEN (CONVERT(DATETIME, Datum, 102) -1)
WHEN DATENAME(DW, CONVERT(DATETIME, Datum, 102)) = 'Sunday'
THEN (CONVERT(DATETIME, Datum, 102) -2)
ELSE
DATUM
END
更新后检查数据:
select * from HistorySave;
演示:
希望这有助于:
为测试创建表:
create table HistorySave(Datum date);
插入一些测试值:
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-05', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-04', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-03', 102));
Insert into HistorySave values (CONVERT(DATETIME, '2012-06-09', 102));
检查插入数据中的天数
SELECT DATENAME(DW, CONVERT(DATETIME, DATUM, 102)) FROM HistorySave;
更新前检查数据:
select * from HistorySave;
更新声明:
UPDATE HistorySave
SET Datum =
CASE
WHEN DATENAME(DW, CONVERT(DATETIME, Datum, 102)) = 'Saturday'
THEN (CONVERT(DATETIME, Datum, 102) -1)
WHEN DATENAME(DW, CONVERT(DATETIME, Datum, 102)) = 'Sunday'
THEN (CONVERT(DATETIME, Datum, 102) -2)
ELSE
DATUM
END
更新后检查数据:
select * from HistorySave;
演示:
你需要更新如下
Update table set column=(select
column
From table where to_char(date,
'Day') ='FRI') where to_char(date,
'Day') LIKE 'S%' ;
你需要更新如下
Update table set column=(select
column
From table where to_char(date,
'Day') ='FRI') where to_char(date,
'Day') LIKE 'S%' ;
@@DateFirst+DatePart weekday,SampleDate-1%7+1将始终返回一个1到7的整数,其中1对应于星期日,而不管DateFirst或Language的设置如何
您可以使用以下代码将周末日期推回到上一个星期五:
-- Get the current date (without time).
declare @Today as Date = GetDate();
-- Move Saturday or Sunday dates back to the prior Friday.
select @Today as Today,
case ( @@DateFirst + DatePart( weekday, @Today ) - 1 ) % 7 + 1
when 1 then DateAdd( day, -2, @Today ) -- Sunday.
when 7 then DateAdd( day, -1, @Today ) -- Saturday.
else @Today end as ReportDate;
@@DateFirst+DatePart weekday,SampleDate-1%7+1将始终返回一个1到7的整数,其中1对应于星期日,而不管DateFirst或Language的设置如何
您可以使用以下代码将周末日期推回到上一个星期五:
-- Get the current date (without time).
declare @Today as Date = GetDate();
-- Move Saturday or Sunday dates back to the prior Friday.
select @Today as Today,
case ( @@DateFirst + DatePart( weekday, @Today ) - 1 ) % 7 + 1
when 1 then DateAdd( day, -2, @Today ) -- Sunday.
when 7 then DateAdd( day, -1, @Today ) -- Saturday.
else @Today end as ReportDate;
在sql server中,天数等于数字:这完全取决于您的语言。但是,请注意,今天没有人返回0,您关于0->Sunday的声明恐怕在所有方面都是错误的。这是我的错。我已经尝试并更新了解决方案。它对我有用。我注意到语言的变化。问候。在sql server中,天数等于数字:这完全取决于您的语言。但是,请注意,今天没有人返回0,您关于0->Sunday的声明恐怕在所有方面都是错误的。这是我的错。我已经尝试并更新了解决方案。它对我有用。我注意到语言的变化。向你问好吗?不在tsql.to_char中?不在tsql中。这是最健壮的解决方案,因为它考虑了DATEFIRST设置。这是最健壮的解决方案,因为它考虑了DATEFIRST设置。