Запрос запросов и CAST как дата

Я использую cfspreadsheet для чтения значений из таблицы Excel, а затем выполняю запрос запросов для сортировки поля даты, потому что все поля, возвращаемые cfspreadsheet, имеют тип «VarChar». Вот код:

<cfspreadsheet action = "read" query = "mySpreadsheet" src = "mp.xls" sheet="1" rows="2-178"> 

<cfquery name="mySpreadsheet2" dbtype="query">
 select  
(CAST(date_field as DATE))   as mydate

from mySpreadsheet order by mydate

</cfquery>

В электронной таблице даты указаны в евро формате дд /мм /гг. Проблема в том, что функция CAST в запросе запросов превращает поле date_field из varchar в date, но в американский тип даты (месяц первый, день после).

Например, столбец Excel date_field содержит это значение 01/07/2011 (первое июля 2011 года, поскольку оно является датой Eurodate), но оно преобразовано в {ts '2011-01-07 00:00:00'} в запросе запросов.

Есть ли способ использовать CAST в запросе запросов для получения даты в европейском стиле? Чтобы обойти это в оракуле, вы должны сделать: to_date (date_field, 'DD: MM: YY'), но я не знаю, как решить эту проблему здесь.

7 голосов | спросил user1201723 20 MarpmTue, 20 Mar 2012 20:26:07 +04002012-03-20T20:26:07+04:0008 2012, 20:26:07

3 ответа


0

Как упоминалось в некоторых комментариях, CAST применяет правила форматирования даты в США при разборе строк даты. Таким образом, неоднозначное значение типа 01/07/2011 всегда будет интерпретироваться как 7 января.

Поскольку формат даты известен, я думаю, что есть два простых варианта:

A) Выполните итерацию запроса и проанализируйте строки даты вручную:

<cfloop query="yourQuery">
    <cfif LSIsDate(yourQuery.DateCol, "English (UK)")>
        <cfset yourQuery.DateCol[currentRow] = LSParseDateTime(yourQuery.DateCol, "English (UK)") />
    </cfif>
</cfloop>

- == ИЛИ

B) Измените формат основной ячейки, как предложил Шон. Примените формат США, например, mm/dd/yyyy, чтобы возвращаемые строки были правильно проанализированы с помощью CAST. Или вы можете просто применить не однозначный формат, например yyyy-mm-dd, который будет правильно сортироваться даже в виде строки.

<!--- read in the workbook --->
<cfset sheet = spreadSheetRead("c:/path/file.xls")>
<!--- apply the new format and save back to disk --->
<cfset SpreadSheetFormatColumn(sheet, {dataFormat="yyyy-mm-dd"}, yourDateColumn)>
<cfset SpreadSheetWrite(sheet, "c:/path/file.xls", true)>
<cfspreadsheet action="read" query="yourQuery" src="c:/path/file.xls" sheet="1" rows="2-178" >
ответил Leigh 21 MaramWed, 21 Mar 2012 08:39:18 +04002012-03-21T08:39:18+04:0008 2012, 08:39:18
0

Вы должны иметь возможность использовать SpreadsheetFormatColumn в столбцах даты с dataformat для установки правильного формата даты для этого столбца.

Вы можете найти больше информации о SpreadsheetFormatColumn и dataformat в документации ColdFusion 9:

SpreadsheetFormatColumn: http://help.adobe.com/en_US /ColdFusion /9.0 /CFMLRef /WSc3ff6d0ea77859461172e0811cbec22c24-6806.html

Параметры форматирования: http://help.adobe.com /en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6747.html

ответил Sean Coyne 20 MarpmTue, 20 Mar 2012 20:31:00 +04002012-03-20T20:31:00+04:0008 2012, 20:31:00
0

Я думаю, что вы хотите сделать, это использовать функцию setLocale(), чтобы установить языковой стандарт для европейского региона, а затем выполнить запрос: of-query с функцией CAST():

<cfset setLocale("French (Standard)") />

<cfquery name="mySpreadsheet2" dbtype="query">
   select (CAST(date_field as DATE))   as mydate
     from mySpreadsheet order by mydate
</cfquery>

Я только что попробовал с VARCHAR, выбранными из базы данных (используя Oracle TO_CHAR(date_field, 'DD/MM/YYYY')), и это сработало. Не знаю, будет ли у вас такой же результат с <cfspreadsheet>.

Надеюсь, это поможет.

ответил David Faber 21 MaramWed, 21 Mar 2012 04:06:38 +04002012-03-21T04:06:38+04:0004 2012, 04:06:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132