gpt4 book ai didi

mysql - ColdFusion 和 mySQL 中的日期格式错误

转载 作者:行者123 更新时间:2023-11-29 01:28:57 25 4
gpt4 key购买 nike

我已经建立了一个文件,它从一个数据库中读取一个 xml 文件并将该数据插入到另一个数据库中。除了日期格式上的一个奇怪错误外,一切正常。我需要的日期格式是 yyyy-mm-dd。但是,原始数据设置为格式 dd-mm-yyyy

我的代码读取并插入所有数据,但是当它读取日期字段时,当日期小于 12 时出现问题。它奇怪地以相反的方式插入它。

  • 如果日期是 11/10/2014,它会将其提取为 2014/11/10
  • 但是,如果日期是 13/10/2014,它会将其输入为 2014/10/13(这是正确的,也是我需要的)。

如果我将 MySQL 字段类型设置为 textvarchar,它会以正确的顺序插入值,但当然不是 ColdFusion 的日期格式。所以它插入一个日期为 11/10/2014,但是当我将相同的字段设置为键入“日期”甚至“日期时间”格式时,它会以正确的格式“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>
...

然后我收到以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1900-01-01 00:00:00'}' , ScheduleReferenceNumber = 'TS8279631' ,' at line 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>

但是我得到了错误:

The cause of this output exception was that: coldfusion.runtime.locale.CFLocaleBase$InvalidDateTimeException: StartDate is an invalid date or time string..

也尝试过:

<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>

我得到以下信息:

Error Executing Database Query.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2014-10-11 00:00:00.0' , Currency = '' , Tutor = '' , CourseLoc' at line 17

最佳答案

您忘记指定 Locale .省略时,LS 日期函数使用当前页面的区域设置。听起来你的是“英语(美国)”。根据美国日期惯例,月份始终在第一位。因此字符串“11/10/2014”将始终视为 11 月 10 日,而不是 10 月 11 日。

也就是说,如果您要填充日期/时间列,则应使用 cfqueryparam并将日期 对象 传递给数据库,而不是日期字符串,后者可能会被误解,具体取决于数据库设置。

一种选择是使用 LSParseDateTime()使用适当的语言环境。不要使用 ParseDateTime()。与大多数标准日期函数一样,它始终使用美国日期规则,并且会产生与您现在相同的错误结果。

   <cfset DateLocale = "English (UK)">
<cfset DateString = "11/10/2014">
...
<cfquery ...>
INSERT INTO Table ( SomeColumn )
VALUES (
<cfqueryparam value="#LSParseDateTime(dateString, dateLocale)#"
cfsqltype="cf_sql_timestamp">
)
</cfquery>

此外,为了验证,请务必使用 IsDate 的 LS 版本。再次使用适当的语言环境。

<cfif LSIsDate( dateString, dateLocale )>
....
</cfif>

注意:请记住,CF 的日期函数在什么被视为有效方面是出了名的“慷慨”。如果日期字符串的格式可能不同,您可能希望实现自己的日期验证。

关于mysql - ColdFusion 和 mySQL 中的日期格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170245/

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