【问题标题】:Why the date format is changed when date is converted to String?为什么将日期转换为字符串时会更改日期格式?
【发布时间】:2013-02-21 20:43:26
【问题描述】:

我正在使用 VB.net 构建 SQL 查询

dateFrom As Date ... '02/21/2013
sqlQuery.add(“ HAVING MIN(DATEADD(HOUR, 2, columnDate)) >= ” + myDate)

MyDate 格式是“MM/dd/YYYY”(2013 年 2 月 21 日),但是当我添加到 sqlQuery 字符串时,我得到了这种格式“dd/MM/YYYY”(21/02/2013)。这会导致 SQL 查询失败

为什么日期转换为“ToString”时会改变日期格式?

注意事项

  • 我无法在查询中使用参数
  • 框架 2.0
  • SQL 服务器

【问题讨论】:

  • 如果可能,不要通过连接字符串来创建 SQL,而是使用一些 ORM(如 Entity Framework)。如果你不能这样做,那么至少使用参数化查询,它将解决这个问题和许多其他问题。
  • myData的数据类型是什么?如果是DateTime,那么它就没有格式——它是二进制的。
  • 约翰,myDate 是Date 类型。
  • 如果您希望columnDate 上的索引有机会被使用,请将MIN(DATEADD(HOUR, 2, columnDate)) >= 更改为DATEADD(HOUR, 2, MIN(columnDate)) >=

标签: .net sql vb.net date .net-2.0


【解决方案1】:

MyDate 格式为“dd/MM/YYYY”

不清楚你的意思是什么,但我怀疑你对DateTime 总体来说有点困惑。 DateTime 没有格式,就像(比如说)int 一样。如果您从十六进制解析int,然后将其转换为字符串,则默认情况下它将被格式化为十进制 - 该值是只是一个数字。日期和时间的工作方式相同。

为什么日期转换为“ToString”时会改变日期格式?

它没有“改变”——它事先并不存在。

幸运的是,无论如何您都不应该这样做。相反,您应该使用参数化 SQL,并将myDate 设置为命令参数。您应该对 SQL 命令中的 all 值执行此操作。那样:

  • 您无需担心这样的文本转换。
  • 您受到SQL injection attacks 的保护
  • 您将代码 (SQL) 与数据(值)分开

【讨论】:

  • 很好的答案乔恩,但不使用“参数”,我怎样才能在查询中获得正确的日期格式? myDate.toString("MM/dd/YYYY")?
  • @Coyolero:这取决于 RDBMS,但通常'yyyyMMdd' 是安全的。
  • @Coyolero:虽然yyyyMMddyyyy-MM-dd 可能是安全的,但您真的,真的,真的应该现在就开始使用参数。这样做的重要性怎么强调都不为过。不要拖延。
  • @Coyolero - 为什么使用参数?我能想到的唯一原因是您的数据库不支持它们。
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多