C# 完成“以文本形式搜索日期”任务所需的操作由前端执行,前端将向RDBMS提供一组参数,使其能够正确处理日期
结果如下:C# 完成“以文本形式搜索日期”任务所需的操作由前端执行,前端将向RDBMS提供一组参数,使其能够正确处理日期,c#,sql-server,C#,Sql Server,结果如下: */12/2015-->“20151201”和“20151231”之间的 */*/2015-->介于“20150101”和“20151231”之间的 */*/*-->根本没有过滤器 如果使用存储过程,结果将是两个日期参数,其中填充了日期值。您找到的解决方案是在正确处理信息时唯一有意义的解决方案 你所要求的是给用户“一些东西”,允许他们以文本形式搜索日期,我想有两种可能的解决方案: 你找到的那一个(我是“正确的”那一个) 将日期存储为格式化字符串(错误、避免、噩梦) 如果您(错误地
*/12/2015
-->“20151201”和“20151231”之间的
*/*/2015
-->介于“20150101”和“20151231”之间的
*/*/*
-->根本没有过滤器如果使用存储过程,结果将是两个日期参数,其中填充了日期值。您找到的解决方案是在正确处理信息时唯一有意义的解决方案 你所要求的是给用户“一些东西”,允许他们以文本形式搜索日期,我想有两种可能的解决方案:
- 你找到的那一个(我是“正确的”那一个)
- 将日期存储为格式化字符串(错误、避免、噩梦)
*/12/2015
-->“20151201”和“20151231”之间的
*/*/2015
-->介于“20150101”和“20151231”之间的
*/*/*
-->根本没有过滤器如果使用存储过程,则结果将是两个日期参数,其中填充了日期值。在SQL中,您可以将
*
替换为%
,并像一样使用。下面是一个示例:
SELECT *
FROM (
SELECT cast('20150611' as date) as dateColumn
UNION
SELECT cast('20150610' as date)) as X
WHERE convert(varchar, dateColumn, 103) LIKE N'%/06/2015'
请记住,从性能角度来看,这是实用的,不是最佳解决方案。在SQL中,您可以将*
替换为%
,并像一样使用。以下是一个示例:
SELECT *
FROM (
SELECT cast('20150611' as date) as dateColumn
UNION
SELECT cast('20150610' as date)) as X
WHERE convert(varchar, dateColumn, 103) LIKE N'%/06/2015'
请记住,从性能角度来看,这是实用的,不是最佳解决方案。在SQL中,您可以将*
替换为%
,并像一样使用。以下是一个示例:
SELECT *
FROM (
SELECT cast('20150611' as date) as dateColumn
UNION
SELECT cast('20150610' as date)) as X
WHERE convert(varchar, dateColumn, 103) LIKE N'%/06/2015'
请记住,从性能角度来看,这是实用的,不是最佳解决方案。在SQL中,您可以将*
替换为%
,并像一样使用。以下是一个示例:
SELECT *
FROM (
SELECT cast('20150611' as date) as dateColumn
UNION
SELECT cast('20150610' as date)) as X
WHERE convert(varchar, dateColumn, 103) LIKE N'%/06/2015'
请记住,从性能的角度来看,这是实用的,并不是最好的解决方案。“一种更简单的方法”并不是一个真正的问题。您具体需要帮助的部分是什么?请看一看。在给定的情况下,我将解析日期搜索字符串,以获取整数形式的日期、月份和年份(在c#中),然后在sql中按3个整数参数进行搜索(我假设日期列的类型是datetime,而不是varchar)似乎使用范围解析和搜索是一个很好的解决方案。如果您在日期字段上有索引,那么范围条件将使用它。如果您开始强制转换,可能会出现性能问题。顺便问一下,在数据库中使用什么数据类型来存储日期?表中是否有许多行?出于好奇,是否会出现*/12/*
(任何一年的12月)也可以吗?否则我会将解析的值转换为范围,并使用介于之间以获得更好的性能(取决于您的索引)。使用year()和month()可能会将您的查询计划更改为索引扫描,而不是搜索。抱歉@kiryl,交叉发布“更简单的方法”这不是一个真正的问题。您具体需要帮助的部分是什么?请看一看。在给定的情况下,我将解析日期搜索字符串,将日期、月份和年份作为整数(在c#中),然后在sql中按3个整数参数进行搜索(我假设日期列的类型是datetime,而不是varchar)似乎使用范围解析和搜索是一个很好的解决方案。如果您在日期字段上有索引,那么范围条件将使用它。如果您开始强制转换,可能会出现性能问题。顺便问一下,在数据库中使用什么数据类型来存储日期?表中是否有许多行?出于好奇,是否会出现*/12/*
(任何一年的12月)也可以吗?否则我会将解析的值转换为范围,并使用介于之间以获得更好的性能(取决于您的索引)。使用year()和month()可能会将您的查询计划更改为索引扫描,而不是搜索。抱歉@kiryl,交叉发布“更简单的方法”这不是一个真正的问题。您具体需要帮助的部分是什么?请看一看。在给定的情况下,我将解析日期搜索字符串,将日期、月份和年份作为整数(在c#中),然后在sql中按3个整数参数进行搜索(我假设日期列的类型是datetime,而不是varchar)似乎使用范围解析和搜索是一个很好的解决方案。如果您在日期字段上有索引,那么范围条件将使用它。如果您开始强制转换,可能会出现性能问题。顺便问一下,在数据库中使用什么数据类型来存储日期?表中是否有许多行?出于好奇,是否会出现*/12/*
(任何一年的12月)也可以吗?否则我会将解析的值转换为范围,并使用介于之间以获得更好的性能(取决于您的索引)。使用year()和month()可能会将您的查询计划更改为索引扫描,而不是搜索。抱歉@kiryl,交叉发布“更简单的方法”这不是一个真正的问题。您具体需要帮助的部分是什么?请看一看。在给定的情况下,我将解析日期搜索字符串,将日期、月份和年份作为整数(在c#中),然后在sql中按3个整数参数进行搜索(i