2012-01-01 130 views
1

我试图在时间戳字段(yyyy-mm-dd HH:mm:ss)中重新格式化为特定日期时在Coldfusion中查询查询。我可以将原始查询转换为“日期格式”,但我无法获得查询查询来选择日期。我试图将cf_sql queryparam更改为不同的值,但我一直得到0 RecordCount。数据库字段是一个varchar,我试图改变它到一个时间戳,它仍然无法正常工作。任何想法,我没有看到?Coldfusion查询MySQL查询日期选择

<cfquery datasource="#DataSource#" name="rsAll"> 
    SELECT ID, date_format(DateSent, '%Y-%m-%d') As DateSent 
    FROM 'workorders' 
    WHERE RelCompID_FK = '#SESSION.Auth.CompID#' 
</cfquery> 

<cfquery name="rsAllDay" dbtype="query"> 
    SELECT * 
    FROM rsAll 
    WHERE DateSent = <cfqueryparam value="2010-03-03" cfsqltype="cf_sql_date"> 
</cfquery> 
+0

* db字段是一个varchar *不要将日期存储为字符串。存储日期*作为日期*。那么你不必担心这些隐式转换问题。此外,您可以利用内置的日期功能,无需所有的转换.. – Leigh 2013-01-17 19:59:03

回答

2

MySQL的date_format()函数返回一个字符串,而不是DateTime对象,所以在运行的ColdFusion查询的查询时,你可以使用CF_SQL_VARCHAR数据类型,而不是CF_SQL_DATE数据类型。传入的值需要与第一个查询返回的值完全匹配以匹配。

其他注意事项:

1)使用CFDUMP显示第一次查询的结果,以确保返回的数据类型是你期待什么。

2)在第一个查询的WHERE子句中也使用CFQUERYPARAM

+0

谢谢,帮助!我最终使用STR_TO_DATE(DateSent,'%Y-%m-%d%T')AS DateSent而不是'date_format(DateSent,'%Y-%m-%d')作为DateSent'将其转换为一个日期时间对象,然后能够用查询的CF查询解析原始查询。 – 2012-01-02 17:02:31

+0

太棒了,这篇文章帮了我很多。我还使用了cf_sql_date而不是cf_sql_varchar – Tan 2013-07-16 18:37:21