Esr*_*_92 3 t-sql sql-server datetime date sql-server-2014
我有这样的表结构:
CREATE TABLE Department
(
[IdDepartment] int,
[Name] varchar(23),
[IdUser] int,
[CreateDate] datetime
);
INSERT INTO Department ([IdDepartment], [Name], [IdUser], [CreateDate])
VALUES
(1, 'Sales', 3, '2016-01-15 17:00:00.000'),
(2, 'Finance', null, '2016-01-13 18:00:00.000' ),
(3, 'Accounting' , 5, '2016-03-21 22:00:00.000'),
(4, 'IT' ,3, '2016-03-21 17:00:00.000'),
(5, 'Secretary',null, '2016-03-21 17:00:00.000'),
(6, 'Sport',3, '2016-02-20 16:00:00.000');
Run Code Online (Sandbox Code Playgroud)
我想运行这个查询:
select Name
from Department
where CreateDate = '2016-03-21'
Run Code Online (Sandbox Code Playgroud)
结果返回 0 行。
我认为这是因为表结构中的日期是日期时间,但我尝试这样做,但两者都不适合我:
select Name
from Department
where CreateDate like '%2016-03-21%'
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
Name
-----
Accounting
IT
Secretary
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到这个结果?
希望我解释清楚,谢谢
您正在将DATETIME值与纯值 DATE进行比较。您必须知道,aDATETIME 包括时间
2016-03-21 11:00:00不等于2016-03-21
你可以这样比较
CAST(YourDate AS DATE)=CAST('2016-03-21' AS DATE)
Run Code Online (Sandbox Code Playgroud)
提示:作为一个微小的例外!-CAST(someCol AS DATE)实际上是可控制的,但值得一提的是,这仍然不是最好的主意:dba.stackexchange.com/a/34052/70663
或者你可以尝试BETWEEN
YourDate BETWEEN {d'2016-03-21'} AND {ts'2016-03-21 23:59:59'}
Run Code Online (Sandbox Code Playgroud)
或 - 在大多数情况下这是最优选的
YourDate >= {d'2016-03-21'} AND YourDate < {d'2016-03-22'}
Run Code Online (Sandbox Code Playgroud)
避免由于可控制性而对列值进行操作
最好避免使用日期文字...如果必须的话,您可以阅读此内容
| 归档时间: |
|
| 查看次数: |
6771 次 |
| 最近记录: |