【发布时间】:2016-03-03 23:52:37
【问题描述】:
我已经设置了一个文件,它从一个数据库中读取一个 xml 文件并将该数据插入到另一个数据库中。除了日期格式出现奇怪错误外,一切正常。我需要的日期格式是yyyy-mm-dd。但是,原始数据设置为dd-mm-yyyy格式。
我的代码读取并插入所有数据,但是当它读取日期字段时,当日期低于 12 时出现问题。奇怪的是它以相反的方式插入。
- 如果日期是
11/10/2014,则将其拉入为2014/11/10 - 但是,如果日期是
13/10/2014,它会将其拉入为2014/10/13(这是正确的,也是我需要的)。
如果我将 MySQL 字段类型设置为 text 或 varchar,它会以正确的顺序插入值,但对于 ColdFusion,当然不是以日期格式。所以它插入一个日期为 2014 年 11 月 10 日,但是当我将相同的字段设置为输入“日期”甚至“日期时间”格式时,它会以正确的格式“2014-10-11”插入它,但存在上述问题.
我目前正在使用的代码是:
<cfif isDate(arrA[currentField])>
#currentField# = '#LSdateformat(arrA[currentField],"yyyy-mm-dd")#'
<cfelse>
#currentField# = '#arrA[currentField]#'
</cfif>
我的第二次尝试是使用以下内容:
<cfif isDate(arrA[currentField])>
#currentField# = '#ParseDateTime(arrA[currentField],"yyyy-mm-dd")#'
<cfelse>
...
然后我收到以下错误:
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '1900-01-01 00:00:00'}' 附近,ScheduleReferenceNumber = 'TS8279631' ,' 在第 15 行
在第三次尝试时,我使用了:
<cfloop collection="#arrA#" item="currentField">
<cfif currentField NEQ 'TypeDesc'>
<cfif fieldcount NEQ 0>,</cfif>
<cfif currentField eq 'startDate'>
<cfqueryparam cfsqltype="cf_sql_date" value="#currentField#">
<cfelse>
#currentField# = '#arrA[currentField]#'
</cfif>
<cfset fieldCount=fieldCount+1>
</cfif>
</cfloop>
但是我得到了错误:
此输出异常的原因是: Coldfusion.runtime.locale.CFLocaleBase$InvalidDateTimeException: StartDate 是无效的日期或时间字符串。
也试过了:
<cfset DateLocale = "English (UK)">
<cfset DateString = "11/10/2014">
<cfloop collection="#arrA#" item="currentField">
<cfif currentField NEQ 'TypeDesc'>
<cfif fieldcount NEQ 0>,</cfif>
<cfif currentField eq 'startDate'>
<cfqueryparam value="#LSParseDateTime(dateString, dateLocale)#" cfsqltype="cf_sql_timestamp">
<cfelse>
#currentField# = '#arrA[currentField]#'
</cfif>
<cfset fieldCount=fieldCount+1>
</cfif>
</cfloop>
<cfif checkRecord.recordcount neq 0>
WHERE ScheduleReferenceNumber = '#arrA.ScheduleReferenceNumber#'
</cfif>
</cfquery>
我得到以下信息:
执行数据库查询时出错。
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 ''2014-10-11 00:00:00.0' 附近,货币 = '',导师 = '', 第 17 行的 CourseLoc'
【问题讨论】:
-
嗨,我尝试了几种不同的方法,根据提到的重复错误,但我使用 CreateODBCDate 或 cfqueryparam,它返回错误“日期”是无效的日期或时间字符串。但它不是,因为上面的方法确实有效并带来了日期
-
确保调试已打开。然后使用产生该错误的 sql 以及参数的值来编辑您的问题。
-
您是否有特定原因必须使用循环来构造查询?就个人而言,我尽可能避免使用这种方法,因为与任何动态 sql 一样,它更难“正确”执行,也更难调试。这可能是您的一些错误的原因。其他是由于不正确地使用日期函数。 (例如,
ParseDateTime没有“掩码”参数,日期 objects 不应括在引号中,...)
标签: mysql coldfusion coldfusion-9