В версиях Coldfusion возвращаются разные результаты запросов.

Мы запускаем cfquery на двух разных версиях ColdFusion (CF9 и CF10). Когда результаты возвращаются, даты форматируются по-разному в отдельных версиях.

Запрос

SELECT TOP 100 CONVERT(DATE,Field1,121),Field2
FROM A_TABLE

В CF9 возврат для поля 1 выглядит как 2010-06-01.

В Cf10 возврат для поля 1 выглядит как {ts '2010-06-01 00:00:00'}

Кто-нибудь еще заметил эту разницу? Мы просмотрели документацию по CF и не обнаружили никаких упоминаний об этом изменении.


person tbdevmanager    schedule 15.10.2013    source источник
comment
Все то же самое, если вы используете функцию DateFormat.   -  person fyroc    schedule 15.10.2013
comment
Как вы просматриваете эти данные?   -  person Adam Cameron    schedule 15.10.2013
comment
Похоже, что в CF9 ColdFusion не возвращал формат, заявленный в документации Microsoft, msdn.microsoft.com/en-us/library/ms187928.aspx.   -  person Dan Bracuk    schedule 15.10.2013
comment
Я просматриваю эти данные, выполняя cfdump. Но формат распространяется и на другие выходные данные, включая serializeJson.   -  person tbdevmanager    schedule 15.10.2013
comment
Всякий раз, когда вам нужна отформатированная дата/время, используйте dateFormat(), timeFormat() и/или (в Cf 10) dateTimeFormat() - см. мой ответ ниже.   -  person Scott Stroz    schedule 15.10.2013
comment
@DanBracuk: на связанной странице указано, что формат должен быть: канонический ODBC (с миллисекундами) гггг-мм-дд чч:ми:сс.ммм(24ч) . Я не вижу мс, но кажется, что она ближе   -  person James A Mohler    schedule 15.10.2013


Ответы (1)


Возвращаемые данные одинаковы. То, что вы видите в CF10, — это то, как ColdFusion отображает объекты даты/времени. (отредактировано на основе отзывов Мигеля-Ф)

Всякий раз, когда вы выводите дату/время, вы можете (и должны) использовать dateFormat() , timeformat() (а в CF 10 datetimeformat() ) для стандартного форматирования даты/времени.

person Scott Stroz    schedule 15.10.2013
comment
То, что вы видите в CF10, — это то, как ColdFsuion отображает «сырые» даты/время из базы данных — я не верю, что это точно. Разница в том, что в CF10 он возвращает объект даты/времени, а в CF9 он просто возвращает строковое представление. Результат {ts '2010-06-01 00:00:00'} показывает, как ColdFusion отображает объекты даты/времени. - person Miguel-F; 15.10.2013
comment
Возможно, это разница в драйвере JDBC. В любом случае dateFormat(), timeFormat() и/или dateTimeFormat() решат любые проблемы с отображением, которые у него возникают. - person Scott Stroz; 15.10.2013
comment
Я отредактировал ответ, чтобы учесть то, что вы указали @Miguel-F - person Scott Stroz; 15.10.2013
comment
Да, я согласен с тобой. Просто пытаюсь указать, что похоже, что CF10 на самом деле возвращает объект даты/времени. - person Miguel-F; 15.10.2013
comment
@Leigh Я сделал дамп, о котором вы говорили в столбце, и вы правы, CF10 возвращает java.sql.Date CF9 возвращает java.lang.String - person tbdevmanager; 15.10.2013
comment
Однако @TimBrown ColdFusion все еще может обрабатывать строку как дату. Решение состоит в том, что всякий раз, когда вы хотите вывести даты — даже как часть объекта JSON — используйте dateFormat(), timeFormat() или dateTimeFormat() - person Scott Stroz; 15.10.2013
comment
@ScottStroz Проблема с использованием DateFormat заключается в том, что я не могу установить для столбца в запросе значение ГГГГ-ММ-ДД, потому что тип данных столбца — java.sql.date, и даже после применения изменения он возвращается к типу данных {тс '2010-06-01 00:00:00'} - person tbdevmanager; 15.10.2013
comment
Я не могу установить столбец в запросе @TimBrown - я не совсем понимаю вас. Вы должны использовать функции форматирования только для презентации. Можете ли вы обновить свой вопрос, чтобы показать нам пример того, как вы его используете, и проблему, которую он вызывает? - person Leigh; 15.10.2013
comment
Эти данные отправляются непосредственно как объект запроса в Serialize JSON, поэтому нет возможности отформатировать представление до того, как они будут переданы в SerialzeJSON. - person tbdevmanager; 15.10.2013
comment
О, если serializeJSON выполняет какое-то автоматическое преобразование со столбцами даты и времени, вам может потребоваться: а) преобразовать/преобразовать значения в строку в SQL ИЛИ б) добавить varchar column к объекту запроса, затем прокрутить его и заполнить Столбец varchar вручную с помощью dateFormat(). - person Leigh; 15.10.2013