создайте формулу для преобразования 1 поля varchar с датой и 1 поля varchar в 1 поле даты и времени - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть существующий отчет с 2 varchar полями. 1 содержит дату, 2 содержит время. Мне нужно создать формулу, объединяющую оба, а затем использовать эту формулу для сортировки отчета. Пример:

SCHEDULED_DATE             SCHEDULED_TIME
2018-04-26 00:00:00.000    1:00 PM
2018-04-26 00:00:00.000    NULL

Я хочу добавить 2 поля вместе, а затем отсортировать. В SQL я могу сделать следующее, но в кристальных отчетах он не может правильно конвертироваться и выдает ошибку.

ORDER BY Convert(Datetime, SCHEDULED_DATE + Convert(time,ISNULL(SCHEDULED_TIME, '00:00:00.000')))

Вот моя попытка формулы Crystal Report:

If IsNull ({Inspections.SCHEDULED_TIME})
Then CDateTime(CDATE({Inspections.SCHEDULED_DATE}) + Time('00:00:00.000'))
Else CDateTime(CDate({Inspections.SCHEDULED_DATE})+ CTime({Inspections.SCHEDULED_TIME}))

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 30 апреля 2018

Прежде всего, значения даты и времени никогда не должны храниться в виде текста.
Лучше использовать соответствующие типы данных вашей СУБД.

Затем просмотрите несколько вопросов в своей формуле:

  • CDate и CDateTime не поддерживают миллисекунды
  • Date и Time не могут быть объединены с +
  • Столбец SCHEDULED_DATE уже содержит часть времени, и вы (пытаетесь) добавить еще один
  • При объединении части даты и времени разделяйте их пробелом

Итак, вы должны удалить часть времени и объединить столбцы без преобразования их в Date или Time:

If IsNull ({Inspections.SCHEDULED_TIME})
Then CDateTime(CDATE({Inspections.SCHEDULED_DATE}))
Else CDateTime(Left({Inspections.SCHEDULED_DATE},10)+" "+{Inspections.SCHEDULED_TIME})

Примечание: Я полностью удалил время 00:00:00.000 в "True" -части, так как оно не требуется, когда вы все равно обнуляете все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...