像这样的东西(不起作用)
CREATE FUNCTION dbo.udf_DayOfWeek
(@b_date DATETIME)
RETURNS VARCHAR(10)
AS
BEGIN
DECLARE @weekday VARCHAR(10)
IF (SELECT DATENAME(dw, @b_date)
RETURN (@weekday)
END;
GO
使用后
SELECT dbo.udf_DayOfWeek ('May 22, 2016');
GO
返回值1-7(一周中的一天数)
我正在使用SQL Server 2014
答案 0 :(得分:1)
您将要使用DATEPART()
与DATENAME()
来获取数值,但这可以内联完成,并且实际上不需要它自己的函数。
SELECT DATEPART(weekday,'May 22, 2016')
修复函数语法......
CREATE FUNCTION dbo.udf_DayOfWeek (@b_date DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @weekday INT
SELECT @weekday = DATEPART(WEEKDAY, @b_date)
RETURN (@weekday)
END
GO
答案 1 :(得分:0)
工作日的DatePart使用DateFirst设置,因此难以一致地使用。问题是,世界上有些地方认为星期日是一周的第一天,而其他地方则认为星期一是一周的第一天。由于这种歧义,SQL Server将使用当前连接到数据库的登录的datefirst设置。要查看datefirst设置列表,请运行以下命令:
Select * From sys.syslanguages
您可以手动设置在连接期间持续存在的DateFirst值,如下所示:
Set DateFirst 1
SELECT DATEPART(weekday,'May 22, 2016')
Set DateFirst 7
SELECT DATEPART(weekday,'May 22, 2016')
请注意,上一代码的输出会根据DateFirst设置而更改。
如果您希望1始终代表星期日,无论用户的语言设置如何,您都可以使用:
Select DateDiff(Day, 6,@DateVariable) % 7 + 1
使用此信息,您可以创建用户定义的函数,如下所示:
CREATE FUNCTION dbo.udf_DayOfWeek
(@b_date DATETIME)
RETURNS int
AS
BEGIN
return (
Select DateDiff(Day, 6,@b_date) % 7 + 1
)
END;