0

我在使用时间查询 mysql 时遇到问题。

DateTime dt = DateTime.Now;
string datet = dt.ToString("yyyy-MM-dd hh:mm:ss"); //gives 2013-04-17 12:59:31

但同时当我使用-->查询sql时

SELECT NOW()

它给了 2013-04-17 00:59:24

当小时部分为上午 12 点(24 小时)时,我的以下查询失败

我正在使用的查询是

 string q = "SELECT orderid,fname,subtotal FROM userinfo WHERE dtbook > '" + from + "' AND dtbook < '" + to + "'

当我在 sql 中运行以下查询时,将 12 更改为 00

SELECT * FROM userinfo WHERE dtbook > CAST('2013-04-17 00:00:00' AS DATETIME)

我得到了正确的结果,但是由于我必须计算从服务器查询到数据库的时间,所以我的查询变成了

SELECT * FROM userinfo WHERE dtbook > CAST('2013-04-17 12:00:00' AS DATETIME)

我在服务器上都尝试过转换时间 ToString("yyyy-MM-dd h:mm:ss") 和 ToString("yyyy-MM-dd hh:mm:ss") 但结果是一样的我怎样才能得到小时分量在 00 时是 24 小时??

4

1 回答 1

3

好吧,直接的问题是您使用hh的是HH. hh是 12 小时值的说明符;HH是 24 小时值的说明符。

但是,您应该首先将日期转换为字符串。与其将值转换为字符串并将其包含在 SQL 语句中,不如使用参数化查询,并将参数设置DateTime.

那样:

  • 您避免在 SQL 中使用 CAST
  • 您避免了有问题的字符串转换
  • 代码将更清晰(您将能够看到不涉及字符串连接的 SQL,并且您将代码与数据分开)
  • 您将养成编写参数化查询的习惯

您应该始终参数化您的 SQL - 主要是为了避免SQL 注入攻击,但也为了上述所有好处。更一般地说,避免不必要的转换——每次转换都有可能出错。

于 2013-04-17T06:25:33.870 回答