日期字符串在日期范围内不起作用

时间:2013-04-10 15:00:50

标签: oracle date coldfusion

我遇到了几个日期的问题,目前无法解决这个问题。

我有以下格式的2个日期字符串:dd-mm-yyyy。例如,

  • DATE1 = 10-03-2013
  • DATE2 = 15-03-2013

我需要在以下查询中使用这些日期:

<cfquery name="qry1" datasource="#getDSN()#">
        SELECT      
            DOCUMENT_NUMBER
        FROM
            MY TABLE            
        WHERE
            DATE_ORDER_ENTER 
        BETWEEN 
            <cfqueryparam value="#DATE1#"  maxlength="10">
        AND
            <cfqueryparam value="#DATE2#" maxlength="10">                   
    </cfquery>

我遇到的问题是将这些日期字符串转换为实际日期。我发现月和日正在交换。我尝试了createODBCDate()之类的函数来查看是否能解决问题,但它仍然无效。有没有人有解决方案?

我使用的是CF9.01和Oracle 10g。

非常感谢, JC

3 个答案:

答案 0 :(得分:2)

  

我发现月和日正在交换。我试过了   像createodbcdate()这样的函数来查看这是否可以解决问题   但仍然没有工作。

标准CF日期函数如CreateODBCDate,ParseDateTime,etecetera 始终使用English (U.S.) date formatting conventions。因此,日期字符串10-03-2013始终视为10月3日。对于像15-03-2012这样的非模糊日期字符串,你很幸运。显然没有第15个月,因此CF会自动交换它们。这就是似乎使用某些非美国日期字符串而不是其他字符串的原因。

要解析区域设置敏感日期,请使用LSxxxxx日期函数作为@duncan建议。忽略验证,如下所示:

   <cfset dateObject = LSParseDateTime("10/03/2013", "pt_PT")>

请注意,根据大多数其他语言环境中的dashes ie dd-mm-yyyy are NOT standard文档。显然只有荷兰语(标准)和葡萄牙语(标准)。

此外,请务必将@Dan建议的正确日期类型添加到cfqueryparam。否则,它将默认键入char并可能导致语法错误。

答案 1 :(得分:1)

不像Leigh的回答那么光滑,但这也应该有用。

dateString = "10-03-2013";  // March 10 2013
dateObj = CreateDate(   ListLast(dateString, "-")
                        , ListGetAt(dateString, 2, "-")
                        , ListFirst(dateString, "-")
                    );

换句话说,将字符串视为连字符分隔列表。

答案 2 :(得分:-1)

您可以使用以下功能创建日期:

CreateDate(year, month, day)

并使用以下函数根据需要对其进行格式化

DateFormat("date" [, "mask" ])