SQL DATEDIFF函数返回错误的值
我正在执行下面的sql语句,以使用日期差作为条件来获取和值。“t_QueryDemand”是表名,“DESIRED_SHIP_DATE”是我与当前系统日期比较的值。但是,我总是得到一个日期差高于44100,即使实际差异是0-60之间。所需的装运日期数据类型为datetime2(7)。我正在使用MS SQL server数据库。可能是什么问题SQL DATEDIFF函数返回错误的值,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我正在执行下面的sql语句,以使用日期差作为条件来获取和值。“t_QueryDemand”是表名,“DESIRED_SHIP_DATE”是我与当前系统日期比较的值。但是,我总是得到一个日期差高于44100,即使实际差异是0-60之间。所需的装运日期数据类型为datetime2(7)。我正在使用MS SQL server数据库。可能是什么问题 Dim curDate As Date = Date.Today() Dim strSql7DayDemand As date= "SELECT
Dim curDate As Date = Date.Today()
Dim strSql7DayDemand As date= "SELECT SUM(ORDER_QTY) AS ORDQTY, (TOTAL_SHIPPED_QTY) AS SHIPQTY, DATEDIFF(day," & curDate & ",DESIRED_SHIP_DATE),DESIRED_SHIP_DATE as DIFF from t_QueryDemand where ID='" & Trim(txtPartID.Text) & "' AND DATEDIFF(DAY," & curDate & ",DESIRED_SHIP_DATE) >" &
使用SQL函数GETDATE()而不是使用注入 这将在服务器上计算日期,而不是像当前那样在本地计算 正如已经指出的,您有一个严重的安全漏洞——您需要使用参数化查询,而不是字符串连接,否则容易受到SQL注入攻击
它还将使您的代码更加健壮--现在您有了txtPartID.Text,您只是将其放入查询中,但是如果有人在该字段中输入了非数字--您现在无法捕获它。使用数值类型的参数化查询,当您将数据项转换为数字时,您将发现此问题。学习使用参数!我毫不怀疑,如果你传递了一个日期和时间数据类型参数,而不是不安全地注入
curDate
(和txtPartID.Text
),这将正常工作。参数能解决问题吗?很可能,还有你的巨大安全漏洞,@lakshithadilhan。事实上,再看一眼,我可以肯定地说,它会的。我会努力的。感谢无法解决另一个注入问题:“…ID=”&Trim(txtPartID.Text)&“…”
在这里参数化唯一正确的答案。@Larnu--好了--我解决了您的问题。可能永远不会被OP.@lakshithadilhan读到——在堆栈溢出问题上,我们交换了更多的选票。如果一个答案对你有帮助,你应该投票支持它——如果它回答了你的问题,你可以通过点击复选标记将其标记为已回答。两者都没问题:)祝你好运
DATEDIFF(day,GETDATE(),DESIRED_SHIP_DATE)