Не удалось выполнить преобразование при преобразовании даты и/или времени из символьной строки ошибка — последнее выбранное поле вызывает ошибку

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я получаю ошибку в названии этого поста. Ошибка возникает, когда в запрос включается самый последний оператор case. Если будет удалена последняя инструкция case, скрипт запустится.

В чем может быть проблема?

 USE Reporting  DECLARE @QuarterBeginDate date = '07-01-2021' DECLARE @QuarterEndDate date = '09-30-2021'  SELECT GETDATE() AS RefreshDate,  ROW_NUMBER() OVER (ORDER BY RowID) RowID,  ReportDate AS ReportDate,  AssetName AS [Investment Name],  BuildingName AS [Property Name],  '3Q21' AS QTR,  TenantName AS [Tenant Name],  CASE  WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN LeaseType  WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN 'Vacate'  ELSE 'N/A'  END AS [Lease Type],  SpaceLeaseArea AS [Sq Ft],  CASE  WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN IncomeStartDate  WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN ReportLeaseEndDate  ELSE 'N/A'  END AS [Rent Start Date or Date Vacated],  CASE  WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN IncomeEndDate  WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate   THEN 'N/A'  ELSE 'N/A'  END AS [Rent/Lease End Date] FROM   dbo.LeaseData WHERE  (LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate)   OR (ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate)  

Комментарии:

1. Потому что ваше последнее выражение case возвращает несколько типов данных, что вы не можете сделать. Поэтому для строк, которые возвращали бы «N/A», он пытается преобразовать это в дату и время. Пусть ваш запрос возвращает значение NULL, и если вы хотите отобразить N/A, это будет то, что вы обрабатываете на уровне представления, а не в базе данных.

2. вам нужно либо следовать приведенным выше советам, либо привести свои даты в строку — ошибка заключается в том, что выражение case следует порядку приоритета типов данных и пытается привести 'N/A' в качестве даты