【问题标题】:Handling date in SQL ServerSQL Server 中的处理日期
【发布时间】:2020-09-11 19:44:44
【问题描述】:

我在asp.net 中的一个网站上工作。我从网页中获取日期,然后根据用户输入,我想从 SQL Server 数据库中获取结果(使用存储过程)。

问题是我只能从 UI 中获取日期,格式为 2016-10-08,它是字符串类型。但是在数据库中,我有一列类型为datetime,格式为2016-10-08 17:38:00.000

我正在使用此查询进行搜索,但它不起作用。

select * 
from table 
where acceptedDate like @sDate+ '%';

其中sDate 是存储过程的输入参数。请帮忙。谢谢

【问题讨论】:

  • select * from table where convert(date,acceptedDate) >= @sDate

标签: sql-server datetime stored-procedures


【解决方案1】:

如果您只想比较日级别而忽略小时部分,您可以使用 DateDiff 函数。 将 d 或 DAY 传递给 DateDiff 的间隔参数

例如:

DECLARE @sDate VARCHAR(100)='2016-10-08'
IF ISDATE(@sDate)=1
BEGIN
   select * 
   from table 
   where datediff(d,acceptedDate,@sDate)=0  --same day
END
ELSE 
 PRINT 'Invalid date format!'

【讨论】:

    【解决方案2】:

    不要将日期作为字符串传递。将它们作为 DateTime 传递。
    .Net DateTime maps directly 到 SQL Server 的 DateTime。您所要做的就是将字符串解析为 .Net 代码中的 DateTime 结构,并将其作为参数传递给您的存储过程。 要搜索特定日期并忽略 DateTime 的时间部分,最好在 sql 中使用 >=<

    select * 
    from table 
    where acceptedDate >= @Date
    AND acceptedDate < DATEADD(DAY, 1, @Date);
    

    【讨论】:

    • 实际上的问题是我找不到将输入值解析为日期时间。我正在使用 input type=date 从日历中选择日期。
    • 我试过这个但不起作用 String startDate = DateTime.Parse(txtstartDate.Value)
    • String startDate = DateTime.Parse( txtstartDate.Value) 应该不起作用,也许是DateTime startDate = DateTime.Parse( txtstartDate.Value)。我建议使用TryParseExact而不是Parse,这样1.您可以控制可接受的格式,2如果无法解析字符串,您将不会得到异常。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 2012-05-14
    • 1970-01-01
    • 2013-08-29
    • 2021-02-06
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多