Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:QUOTE的等价物是什么&引用;日期/时间?_Sql_Sql Server 2008_Date_Wildcard - Fatal编程技术网

SQL:QUOTE的等价物是什么&引用;日期/时间?

SQL:QUOTE的等价物是什么&引用;日期/时间?,sql,sql-server-2008,date,wildcard,Sql,Sql Server 2008,Date,Wildcard,默认情况下,目标是使用“%”填充查询的所有输入字段,并允许用户在任何地方输入实际值。但是,这会导致日期/时间字段出现问题。我收到错误:从字符串转换日期和/或时间时转换失败。除了日期之外,如何实现与“%”等效的转换 DECLARE @trans_date datetime = '%' SELECT t.lp_num, t.trans_date FROM ISW_LPTrans AS t WHERE t.trans_date = @trans_date 编辑:-删除类似的,并替换为=

默认情况下,目标是使用
“%”
填充查询的所有输入字段,并允许用户在任何地方输入实际值。但是,这会导致日期/时间字段出现问题。我收到错误:
从字符串转换日期和/或时间时转换失败。
除了日期之外,如何实现与
“%”等效的转换

DECLARE @trans_date datetime = '%'

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

编辑:-删除
类似的
,并替换为
=
,因为人们太过关注这一点,而不是这个问题的焦点。

评论太长了。你的问题没有意义
LIKE
表示字符串,日期不是字符串

如果愿意,可以将日期转换为标准字符串格式,然后使用该格式


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

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

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

CONVERT(VARCHAR(25), trans_date, 126) LIKE '2016-10-01%'
默认情况下,目标是填充查询的所有输入字段 使用“%”并允许用户在任何需要的地方输入实际值


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

如果itrans\u date是一个日期时间,并且应该这样处理,使用BETWEEN/DATEDIFF/DATEPART等搜索日期范围,否则您需要将列强制转换为一种字符类型,这种类型对于大多数搜索场景来说效率低下,也不太有用。用户如何输入数据?它是来自外部源还是直接在DBMS内部?我不能100%确定2008年,但我使用2014年,您可以直接使用“%”之类的日期。问题是您正试图将字符串“%”保存为日期时间。当您使用LIKE时,它会对其进行不同的处理(与使用=符号相比)。@Cody360c将通过报表生成器3.0的界面进行处理。所以通过一份报告。@Cody360c什么是你绝对需要申报的?@Cody360c不,只是LinqPad强迫我使用它。在ReportBuilder3.0中,您不需要它。这是SQL Server早期版本中才有的吗?我正在使用2014,我可以直接使用LIKEDate@Cody360c-它隐式地将其强制转换为
varchar
still,并且指定一种格式至少可以为您提供一条线索,如果您确实想要精确匹配的话,可以使用正确的格式。@MartinSmith所以基本上只是一些健康的编程实践。不一定需要,但可能非常有用。最好自己做,然后希望它能为您正确完成。@Cody360c要清楚,我不认为为了以任何方式进行通配符搜索而将日期时间列转换为字符串代表“健康的编程实践”。它完全消除了使用索引的可能性。@Cody360c-是的,隐式转换似乎是
CONVERT(varchar(40),getdate(),0)
对我来说是
2016年7月21日下午2:04PM
——但对于具有不同语言设置的人,默认强制转换行为的字符串将不同。首要目标是允许Report Builder 3.0中的用户在输入字段中保留默认值
%
,或者输入自己的日期。也就是说,默认情况下,查询应返回所有日期,然后仅当用户提供真实日期时,才将其缩小到特定日期。我怎样才能做到这一点?@whatwhat。通常,应用程序会选择单个日期或日期范围,并将其作为参数传递到查询中。当参数为
NULL
时,将选择所有日期。是的,这就是我试图实现的-尝试复制选择所有日期的效果,但从查询端。