给定日期”;2010年3月13日;,在MYSQL Where子句中使用它?

给定日期”;2010年3月13日;,在MYSQL Where子句中使用它?,mysql,datetime,date,coldfusion,Mysql,Datetime,Date,Coldfusion,我想在以下日期通过Coldfusion传递一个MYSQL查询:2010年3月13日 因此,查询对其进行过滤,如下所示: SELECT * FROM myTable WHERE dateAdded before or on 03/13/2010 我还希望能够将两个日期作为范围,从:2000年11月1日到:2010年13月3日 SELECT * FROMT myTable WHERE dateAdded is ON or Between 01/11/2000 through 03/13/2010

我想在以下日期通过Coldfusion传递一个MYSQL查询:2010年3月13日 因此,查询对其进行过滤,如下所示:

SELECT *
FROM myTable
WHERE dateAdded before or on 03/13/2010
我还希望能够将两个日期作为范围,从:2000年11月1日到:2010年13月3日

SELECT *
FROMT myTable
WHERE dateAdded is ON or Between 01/11/2000 through 03/13/2010

还有,有没有一种方法可以让一个查询同时处理Date\u Start和Date\u END,或者只处理其中一个

谢谢

看看

这是相反的结果 DATE_FORMAT()函数。这需要一段时间 字符串str和格式字符串格式。 STR_TO_DATE()返回日期时间值 如果格式字符串同时包含 日期和时间部分,或日期或时间 如果字符串仅包含日期,则为 或者是时间的部分。如果日期、时间或 从str提取的日期时间值为 非法,STR_TO_DATE()返回NULL 并发出警告。服务器 扫描试图匹配格式的str 去吧。格式字符串可以包含 文字字符和格式 以%开头的说明符。字面意义的 格式中的字符必须匹配 字面上的str.格式说明符 格式必须与日期或时间部分匹配 对于可以 在格式中使用,请参见日期\格式() 功能描述

选择*
从myTable
其中(dateAdded=YourdateValueEnd,YourdateValueStart为空)
或(在DateValueStart和DateValueEnd之间添加的日期)

如果您无法在Coldfusion中将日期格式化为
YYYY-MM-DD
,您可以使用MySQL中的
STR_to_date
函数,如下所示:

SELECT 
    *
FROM 
    myTable 
WHERE 
    dateAdded <= STR_TO_DATE('03/13/2010','%m/%d/%Y');

我相信MySQL可以在日期上使用比较运算符

所以我想你可以

SELECT *
FROM myTable
WHERE dateAdded  <= 20100111

and

SELECT *
FROMT myTable
WHERE dateAdded is  BETWEEN 20000111 AND 20100303
选择*
从myTable

其中dateAdded在Coldfusion中执行此操作的最佳方法是使用cfqueryparam来管理字符串到日期对象的转换,并提供一定程度的SQL注入预防

<cfset myResult = queryNew("id")>
<cfset startDate = "01/11/2000">
<cfset endDate = dateFormat(now(), "mm/dd/yyyy")>

<cfquery name="myResult" datasource="myDatasource">
    SELECT *
    FROM myTable 
    WHERE dateAdded BETWEEN <cfqueryparam CFSQLType="CF_SQL_DATE" value="#startDate#">
    AND <cfqueryparam CFSQLType="CF_SQL_DATE" value="#endDate#">
</cfquery>

<cfoutput query="myResult">
 ...output code here
</cfoutput>

挑选*
从myTable
其中日期添加在
及
…在此输出代码

您可以将cfqueryparam与cfsqltype的CF\u SQL\u时间戳一起使用。 给定“startDate”和“endDate”变量,下面的代码应该可以工作。如果startDate或endDate设置为false,则不包括:

<cfset startDate = createDate(2010, 01, 19) />
<cfset endDate  = createDate(2010, 01, 26) />

<cfquery name="q" datasource="#request.dsn#">
    SELECT *
    FROM myTable
    WHERE 
    (
        <cfif isDate(startDate)>
            dateAdded >= <cfqueryparam value="#dateFormat(startDate, "YYYY/MM/DD")#" cfsqltype="CF_SQL_TIMESTAMP" />
        </cfif>
        <cfif isDate(endDate)>
            <cfif isDate(startDate)>AND</cfif>
            dateAdded <= <cfqueryparam value="#dateFormat(endDate, "YYYY/MM/DD")#" cfsqltype="CF_SQL_TIMESTAMP" />
        </cfif>
    )
</cfquery>

挑选*
从myTable
哪里
(
已添加日期>=
及

dateAdded如何格式化字符串“03/12/2010”要接受以上内容:YourDateValues有没有办法让一个查询既可以处理Date\u Start,也可以处理Date\u END,或者只处理其中一个?@nobosh:可以给我们看一下您的coldfusion代码吗?我们可能会建议一个更好的解决方案。@nobosh:对不起,我刚刚注意到您的日期是MM/DD格式,而不是DD/MM格式。修正了我的答案。dateAdded是数据库中的一个时间戳,所以我添加了一个DATE_格式(dateAdded),这似乎很有帮助……现在的错误是:您的SQL语法有一个错误;请查看与您的MySQL服务器版本对应的手册,了解在STR_to_DATE('03/01/2010','%d/%m/%Y')和STR to_DATE之间使用的正确语法('03/24/2010',''第22行是否有理由认为m&d是小写而Y是大写?
SELECT 
    *
FROM 
    myTable 
WHERE 
    dateAdded BETWEEN STR_TO_DATE('01/11/2000','%m/%d/%Y') AND 
                      STR_TO_DATE('03/13/2010','%m/%d/%Y');
SELECT *
FROM myTable
WHERE dateAdded  <= 20100111

and

SELECT *
FROMT myTable
WHERE dateAdded is  BETWEEN 20000111 AND 20100303
<cfset myResult = queryNew("id")>
<cfset startDate = "01/11/2000">
<cfset endDate = dateFormat(now(), "mm/dd/yyyy")>

<cfquery name="myResult" datasource="myDatasource">
    SELECT *
    FROM myTable 
    WHERE dateAdded BETWEEN <cfqueryparam CFSQLType="CF_SQL_DATE" value="#startDate#">
    AND <cfqueryparam CFSQLType="CF_SQL_DATE" value="#endDate#">
</cfquery>

<cfoutput query="myResult">
 ...output code here
</cfoutput>
<cfset startDate = createDate(2010, 01, 19) />
<cfset endDate  = createDate(2010, 01, 26) />

<cfquery name="q" datasource="#request.dsn#">
    SELECT *
    FROM myTable
    WHERE 
    (
        <cfif isDate(startDate)>
            dateAdded >= <cfqueryparam value="#dateFormat(startDate, "YYYY/MM/DD")#" cfsqltype="CF_SQL_TIMESTAMP" />
        </cfif>
        <cfif isDate(endDate)>
            <cfif isDate(startDate)>AND</cfif>
            dateAdded <= <cfqueryparam value="#dateFormat(endDate, "YYYY/MM/DD")#" cfsqltype="CF_SQL_TIMESTAMP" />
        </cfif>
    )
</cfquery>
<cfset startDate = false />
<cfquery name="q" datasource="#request.dsn#">....