У меня есть таблица кода пакета, которая содержит коды, которые я использую для обозначения определенных периодов даты. Однако есть несколько дат, для которых не существует записи в таблице управления. Для этого я хочу использовать значение по умолчанию в таблице, имеющей год «9999». Однако, когда я пытаюсь изменить год, я получаю ошибку преобразования.Ошибка преобразования при разборе даты
Я могу получить правильное значение из приведенного ниже кода, я просто не могу заставить его работать в реальном запросе.
/* Works */
DECLARE @Date date
SET @Date = '2015-09-20'
SELECT CAST('9999' + '-' + CAST(MONTH(@Date) AS varchar) + '-' + CAST(DAY(@Date) AS varchar) AS date)
Конверсия удалось при преобразовании даты и/или времени из строки символов.
/* Conversion error */
SELECT
EndDate,
CASE
WHEN (SELECT BatchCd FROM BatchCodeMGMT WHERE Orders.EXITDATE BETWEEN BatchStartDt AND BatchEndDt AND RegionBInd = 0) IS NULL THEN
(SELECT BatchCd FROM BatchCodeMGMT WHERE --We set the year to the default year which is 9999 and compare them going backwards
CONVERT(date,('9999' + '-' +
CAST(MONTH(Orders.EndDate) AS varchar) + '-' +
CAST(DAY(Orders.EndDate) AS varchar)
))
BETWEEN BatchStartDt AND BatchEndDt AND AdultEdInd = 0)
ELSE
(SELECT BatchCd FROM BatchCodeMGMT WHERE Orders.EXITDATE BETWEEN BatchStartDt AND BatchEndDt AND AdultEdInd = 0)
END BatchCd
FROM Orders
В таблице код партии более или менее, как это, все столбцы не являются nullble, а также. Поэтому для даты в Приказе «2013-09-15» я бы хотел, чтобы она была изменена на «9999-09-15» и использовала ее для выбора кода партии из таблицы.
-------------------------------------
|BatchCd | BatchStart | BatchEnd |
-------------------------------------
| Pr2 | 9999-01-16 | 9999-06-14 |
| Pr1 | 9999-06-15 | 9999-01-15 |
| Pr2 | 2015-01-16 | 2015-06-14 |
| Pr1 | 2015-06-15 | 2015-08-15 |
-------------------------------------
Редактировать: Я понимаю, что могут возникнуть проблемы при наличии совпадающих дат. Однако для этой таблицы этого не должно быть.
У вас есть несколько строк, где Order.EndDate имеет значение NULL? –
Я согласен с приведенными выше. Предварительно не рекомендуется использовать значение «фиктивного» столбца, чтобы указать, что он не существует. Вы должны объявить его как «с нулями» и вставить значение NULL для дат, которые не существуют. –
@TabAlleman Нет, столбец объявлен как null. – adc90