Sql server 如何在Sql Server中使用DateTime进行模式查找

Sql server 如何在Sql Server中使用DateTime进行模式查找,sql-server,ssms,Sql Server,Ssms,您好,我在sql server表中有一些包含datetime2值的条目。当我运行select语句时,我得到UPDATEDATETIME列的以下内容: UPDATEDATETIME 2021-02-11 23:14:05.727 2021-02-11 22:08:01.960 2021-02-10 19:28:10.263 2021-02-10 19:28:10.263 2021-02-10 19:28:10.263 2021-02-10 19:28:10.263 我只想获取2021-02-10

您好,我在sql server表中有一些包含datetime2值的条目。当我运行select语句时,我得到UPDATEDATETIME列的以下内容:

UPDATEDATETIME
2021-02-11 23:14:05.727
2021-02-11 22:08:01.960
2021-02-10 19:28:10.263
2021-02-10 19:28:10.263
2021-02-10 19:28:10.263
2021-02-10 19:28:10.263
我只想获取2021-02-10中的值,因此我编写了以下查询:

select * from dbo.logtable where UPDATEDATETIME like '2021-02-10%'
但是,这不会返回任何值。我一直认为我可以使用这种模式匹配来查找datetime,因为可以将datetime作为字符串输入? 如何仅获取2021-02-10的日期时间?

使用范围

SELECT *
       FROM dbo.logtable
       WHERE updatedatetime >= '2021-02-10'
             AND updatedatetime < '2021-02-11';
选择*
从dbo.logtable
其中updatedatetime>='2021-02-10'
和更新日期<'2021-02-11';
铸造将有所帮助

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, UPDATEDATETIME DATETIME2(3));
INSERT INTO @tbl (UPDATEDATETIME) VALUES
('2021-02-11 23:14:05.727'),
('2021-02-11 22:08:01.960'),
('2021-02-10 19:28:10.263'),
('2021-02-10 19:28:10.263'),
('2021-02-10 19:28:10.263'),
('2021-02-10 19:28:10.263');
-- DDL and sample data population, end

SELECT * FROM @tbl
WHERE CAST(UPDATEDATETIME AS DATE) = '2021-02-10';
输出

+----+-------------------------+
| ID |     UPDATEDATETIME      |
+----+-------------------------+
|  3 | 2021-02-10 19:28:10.263 |
|  4 | 2021-02-10 19:28:10.263 |
|  5 | 2021-02-10 19:28:10.263 |
|  6 | 2021-02-10 19:28:10.263 |
+----+-------------------------+

您可以使用以下查询:

SELECT *
FROM dbo.logtable
WHERE UPDATETIME >= '2021-02-10';

斯莫尔先生,我同意。写我的答案时没有太多思考。我假设datetime没有regex这样的东西?这是最好的方法,因为它可以很好地处理索引。如果变量中有特定的日期,请使用
updatedatetime>=@date和updatedatetime
@dozie419您确实不想这样做。用于操纵日期,它们是最好的。