Как упоминалось в некоторых комментариях, 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>
- == OR
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" >