【发布时间】: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