我有一个表,其中一列是registrationDate,其类型为datetime。我需要找到所有registrationDate为时间戳00:00:00.000的行。例如:
registrationDate: '2019-03-20 00:00:00.000'
我需要查询类似以下内容的东西:
select * from table where registrationDate like '%00:00:00.000';
我有一个表,其中一列是registrationDate,其类型为datetime。我需要找到所有registrationDate为时间戳00:00:00.000的行。例如:
registrationDate: '2019-03-20 00:00:00.000'
我需要查询类似以下内容的东西:
select * from table where registrationDate like '%00:00:00.000';
WHERE CAST(registrationDate AS TIME) = '00:00'
select case when convert(datetime,'19000101')=0 then 1 else 0 end
返回1。但是在看了你的评论之后,我检查了转换表格并注意到尽管从数字数据类型到 datetime
的转换可以显式和隐式地进行,但是转换为 time
根本不可能。每天都有新的东西可学。 - George Menoutisgetdate()+1
与sysdatetime()+1
)。 - Aaron BertrandWHERE registrationDate = CONVERT(date, registrationDate);
LIKE
不会按照您想象的方式工作。 - Aaron Bertranddate
的优先级比datetime
低。https://learn.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017。在Aaron的表达式中,`CONVERT(date, registrationDate)将被隐式转换回
datetime,但是时间将变为
00:00:00.000`,因为它已经“丢失”。 - Thom ACreate Table #tbl
(
registrationDate Datetime
)
Insert Into #tbl Values
('2019-03-20 00:00:00.000'),
('2019-03-20 00:00:25.000')
查询
Select * From #tbl
Where Cast(registrationDate As Time) = '00:00:00.0000000'
结果:
registrationDate
2019-03-20 00:00:00.000
Select * From #tbl
Where convert(VarChar(50), registrationDate, 121) Like '%00:00:00.000'
select * from table where FORMAT(registrationDate, 'HH:mm:ss:ms') ='00:00:00.000'
以下表达式可以获取每个日期时间值对应的带有时间部分的日期:
dateadd(day, datediff(day, 0, '<date_time>'), 0)
create table foo (id int, registrationDate datetime)
insert foo values
(1, '2019-04-04T03:22:48.00'),
(2, '2019-04-04T00:00:00.00')
select * from foo
where registrationDate =
dateadd(day, datediff(day, 0, registrationDate), 0)
LIKE
操作符不起作用(我相信你已经尝试过了)。你所需要的是具有午夜时间组成部分的数据。 - Aaron Bertrand