- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个查询,我运行它来填充我试图参数化的 CFChart:
<cfquery name="total" datasource="#datasource#">
SELECT *
FROM closed_tickets
WHERE MONTH(closed_date) = #month#
AND YEAR(closed_date) = #dateFormat(theMonth,"yyyy")#
AND technician_id = #techID#
</cfquery>
这是我尝试过的:
<!---Open tickets from chosen year where technician is active --->
<cfquery name="total" datasource="#datasource#">
SELECT *
FROM closed_tickets
WHERE MONTH(closed_date) = <CFQUERYPARAM Value="#month#">
AND YEAR(closed_date) = #dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_TIMESTAMP">
AND technician_id = <CFQUERYPARAM Value="#techID#">
</cfquery>
当我将查询更改为此时,它以某种方式破坏了我的 CFChart。我没有在屏幕上看到任何 CFErrors,但我的 CFChart 是空白的。
我已将其缩小到与我的查询相关:
#dateFormat(theMonth,"yyyy")#" cfsqltype="CF_SQL_TIMESTAMP"
当我删除查询的这个参数化部分并放入
#dateFormat(theMonth,"yyyy")#
有效。
任何人都可以阐明这一点吗?
最佳答案
I don't get any CFErrors on the screen but my CFChart is blank.
暂时忽略 correct approach,发生这种情况的原因是您使用了不正确的 cfsqltype
作为参数。因此,您实际上向数据库发送了与您想象的不同的值(并因此执行了不同的比较)。因此,查询无法找到任何匹配的记录。这就是为什么您的图表是空白的。
通过使用 cf_sql_timestamp
,您可以将“值”转换为完整的日期/时间对象。然而,YEAR() 只返回一个四位数。所以你在比较苹果和橘子。从概念上讲,您的查询实际上是这样做的:
WHERE 2014 = {ts '2009-02-13 23:31:30'}
它不会抛出错误的原因是日期/时间值在内部存储为数字。所以你实际上是在比较一个小数字(即年份)和一个非常大的数字(即日期/时间)。显然日期值会大得多,所以它几乎永远不会与年份数字匹配。同样,概念上您的查询是这样做的:
WHERE 2014 = 1234567890
由于 cfsqltype 是可选的,很多人认为它不是很重要 - 但它确实很重要。
验证:除了其他好处外,cfqueryparam 根据cfsqltype
(日期、日期和时间、数字、等等)。这发生在 将 sql 发送到数据库之前。因此,如果输入无效,您不会浪费一次数据库调用。如果您省略 cfsqltype,或者只使用默认的 ie 字符串,那么您将失去额外的验证。
准确性 选择正确的 cfsqltype 可确保您将正确的值发送到数据库。如上所示,使用错误的类型会导致 CF 向数据库发送错误的值。
cfsqltype
还确保以明确的格式将值提交给数据库,数据库将按照您期望的方式进行解释。从技术上讲,您可以将所有内容发送到数据库一个字符串。但是,这会强制数据库执行 implicit conversion(通常是不希望的)。
通过隐式转换,字符串的解释完全由数据库决定——它可能并不总能给出您期望的答案。将日期作为字符串而不是日期对象提交就是一个典型的例子。当前数据库将如何解释像“05/04/2014”这样的日期字符串? 4 月 5 日还是 5 月 4 日?这取决于。更改数据库或数据库设置,结果可能完全不同。
确保一致结果的唯一方法是指定适当的 cfsqltype。它应该匹配比较列/函数的数据类型,或者至少是等效类型。对于 YEAR()
,它返回一个四位数。所以你应该使用 cf_sql_integer
,作为 Adrian mentioned the comments 。这同样适用于您的 MONTH() 比较。
WHERE Year(ColumnName) = <cfqueryparam value="2014" cfsqltye="CF_SQL_INTEGER">
AND Month(ColumnName) = <cfqueryparam value="11" cfsqltye="CF_SQL_INTEGER">
说了这么多,Dan's suggestion 是执行日期比较的更好方法。 That paradigm 对索引更友好,并且无论您的目标列是否包含日期(仅)或日期和时间都有效。请注意在他的示例中使用了 cf_sql_date
。
cf_sql_timestamp
- 发送日期和时间cf_sql_date
- 仅发送日期。时间值被截断关于mysql - ColdFusion 参数化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049918/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!