Я видел, что это решено здесь в другое время, однако я не уверен, как применить это преобразование в этом случае. Пожалуйста, смотрите сообщения об ошибках и код ниже:
Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона
Ошибка преобразования при преобразовании даты и / или времени из символьной строки.
Код:
ALTER PROCEDURE SP_Loans_to_Date
@ReportDate DATETIME
AS
BEGIN
DECLARE @DayofWeek VARCHAR(100),
@BeginofWeek DATE,
@BeginofMonth DATE,
@BeginofYear DATE
SET @DayofWeek = DATENAME(DW, @ReportDate)
SET @BeginofWeek = (SELECT
CASE
WHEN @DayofWeek = 'Sunday'
THEN DATEADD(DD, 0, @ReportDate)
WHEN @DayofWeek = 'Monday'
THEN DATEADD(DD, -1, @ReportDate)
WHEN @DayofWeek = 'Tuesday'
THEN DATEADD(DD, -2, @ReportDate)
WHEN @DayofWeek = 'Wednesday'
THEN DATEADD(DD, -3, @ReportDate)
WHEN @DayofWeek = 'Thursday'
THEN DATEADD(DD, -4, @ReportDate)
WHEN @DayofWeek = 'Friday'
THEN DATEADD(DD, -5, @ReportDate)
WHEN @DayofWeek = 'Saturday'
THEN DATEADD(DD, -6, @ReportDate)
END BeginofWeek)
SET @BeginofMonth = (SELECT
CONVERT(DATETIME, CONVERT(VARCHAR(100), DATEPART(MM, @ReportDate)) + '1'+
CONVERT(VARCHAR(100), DATEPART(YY, @ReportDate))))
SET @BeginofYear = (SELECT ('1/1' +
CONVERT(VARCHAR(100), DATEPART(YY, @ReportDate))))
SELECT
SSN, LoanDate,
CASE
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 'WeektoDate'
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 'MonthtoDate'
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 'YeartoDate'
ELSE NULL
END ToDate,
CASE
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 1
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 2
WHEN LoanDate >= @BeginofWeek AND LoanDate <= @ReportDate
THEN 3
ELSE NULL
END ToDateOrder
FROM
[dbo].[Dim_Loan];
END