【问题标题】:SQL: What is the equivalent of "%" for date/time?SQL:日期/时间的“%”等价物是什么?
【发布时间】:2016-11-25 01:37:53
【问题描述】:

默认情况下,目标是使用'%' 填充查询的所有输入字段,并让用户在任何他们想要的地方输入实际值。但是,这会导致DATE/TIME 字段出现问题。我收到错误:Conversion failed when converting date and/or time from character string. 我怎样才能达到'%' 的等价物,但对于日期?

DECLARE @trans_date datetime = '%'

SELECT
   t.lp_num,
   t.trans_date
FROM ISW_LPTrans AS t
WHERE t.trans_date = @trans_date

编辑: - 删除了 LIKE 并替换为 =,因为人们一直过于关注它,而这不是这个问题的重点。 p>

【问题讨论】:

  • 如果 itrans_date 是一个日期时间并且应该被这样对待,使用 BETWEEN / DATEDIFF / DATEPART 等搜索日期 ranges 否则你需要将列转换为字符类型这对于大多数搜索场景来说效率低下且不太有用。
  • 用户如何输入数据?它是来自外部来源还是直接来自 DBMS 内部?我不是 100% 确定 2008 年,但我使用 2014 年,您可以直接将 LIKE '%' 与日期一起使用。问题是您试图将字符串 '%' 保存为日期时间。当您使用 LIKE 时,它会有所不同(与使用 = 符号相比)。
  • @Cody360c 它将通过 Report Builder 3.0 的界面。所以通过一份报告。
  • @whatwhatwhat 你绝对需要声明吗?
  • @Cody360c 不,只是 LinqPad 强迫我使用它。在 Report Builder 3.0 中,您不需要它。

标签: sql sql-server-2008 date wildcard


【解决方案1】:

评论太长了。您的查询没有意义。 LIKE 用于字符串,日期不是字符串。

如果您愿意,可以将日期转换为规范的字符串格式,然后使用它。

但是,日期选择器是选择日期的更典型解决方案,生成的代码不使用LIKE

【讨论】:

  • 总体目标是允许 Report Builder 3.0 中的用户在输入字段中保留默认的 % 值或输入他们自己的日期。也就是说,默认情况下,查询应该返回所有日期,然后仅当用户提供真实日期时才将其缩小到特定日期。我怎样才能做到这一点?
  • @whatwhatwhat 。 . .通常,应用程序会选择单个日期或日期范围,并将其作为参数传递给查询。当参数为NULL 时,将选择所有日期。
  • 是的,这就是我想要完成的——试图复制选择所有日期的效果,但从查询端。
【解决方案2】:

您不能直接在日期上使用 LIKE 关键字。 LIKE 主要用于字符串值。

但是,您可以使用CONVERT function 将您的日期转换为 varchar,然后应用 LIKE 关键字。例如:

CONVERT(VARCHAR(25), trans_date, 126) LIKE '2016-10-01%'

默认情况下,目标是填充查询的所有输入字段 使用 '%' 并让用户在任何他们想要的地方输入实际值。

如果您希望允许该用户输入日期,那么您可以简单地为您的日期列提供 NULL 值,而不是使用 % 值填充它(这对于日期列)

【讨论】:

  • 这仅在早期版本的 SQL-Server 中存在吗?我使用的是 2014 年,我可以直接使用 LIKE 和 Date
  • @MartinSmith 所以基本上只是一些健康的编程实践。不一定需要,但可能会变得非常有用。最好自己做,然后希望它为您正确完成。
  • @Cody360c 需要明确的是,我确实认为将日期时间列转换为字符串以便以任何方式进行通配符搜索代表“健康的编程实践”。它完全消除了使用索引的任何可能性。
  • @Cody360c - 是的,隐式转换似乎是CONVERT(varchar(40),getdate(),0),对我来说是Jul 21 2016 2:04PM - 但是对于具有不同语言设置的人来说,默认转换行为的字符串会有所不同。跨度>
猜你喜欢
  • 2010-09-12
  • 2020-12-15
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多