gpt4 book ai didi

coldfusion - 查询查询和 CAST 作为日期

转载 作者:行者123 更新时间:2023-12-04 01:44:40 25 4
gpt4 key购买 nike

我正在使用 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>

在电子表格中,日期采用欧元格式 dd/mm/yy。问题是查询查询中的 CAST 函数将“date_field”从 varchar 转换为日期,但美国类型的日期(首先是月份,之后是日期)。

例如,excel date_field 列包含此值 01/07/2011(2011 年 7 月第一个,因为它是 Eurodate)但它在查询查询中被转换为 {ts '2011-01-07 00:00:00'}。

有没有办法在查询查询中使用 CAST 来生成欧式日期?要在 oracle 中解决这个问题,您可以这样做: to_date(date_field, 'DD:MM:YY') 但我不知道如何在这里解决这个问题。

最佳答案

正如一些评论中提到的,CAST在解析日期字符串时应用美国日期格式规则。所以像 01/07/2011 这样的模糊值将始终解释为 1 月 7 日。

由于日期格式是已知的,我认为两个最简单的选择是:

A) 遍历查询并手动解析日期字符串:

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

-==或

B) 按照 Sean 的建议更改基础单元格格式。应用美国格式,如 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" >

关于coldfusion - 查询查询和 CAST 作为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com