sql以时间字段等于精确到秒的时间为条件查询

时间:2022-10-12 22:30:54
DATE(表中字段)='2017/4/13 10:32:37',查询不出结果,表中DATE有一个相等字段

14 个解决方案

#1


不会的,

表中DATE有一个相等字段 

这个列,数据类型是什么类型?

#2


引用 1楼卖水果的net 的回复:
不会的,

表中DATE有一个相等字段 

这个列,数据类型是什么类型?
datetime类型的

#3



-- 方便贴些数据上来吗 ?

create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36', 'xxx'),
('2017/4/13 10:32:37', 'yyy'),
('2017/4/13 10:32:38', 'zzz')
go
select * from test where dd = '2017/4/13 10:32:37'
go
drop table test 
go

(3 行受影响)
dd                      name
----------------------- ----------
2017-04-13 10:32:37.000 yyy

(1 行受影响)


#4



-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


#5


可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'

#6


引用 4楼卖水果的net 的回复:

-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 标

#7


引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 表

#8


引用 4楼卖水果的net 的回复:

-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


查询的时候怎么去除毫秒位

#9


引用 6 楼 loveqise 的回复:
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 标


select * from test 
where dd between '2017/4/13 10:32:37.000' and '2017/4/13 10:32:37.999'
go

#10


引用 7 楼 loveqise 的回复:
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 表


where convert(varchar,[字段名],120)='2017-04-13 10:32:37'

#11


引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
有这么精确吗

#12


引用 11 楼 cjws555 的回复:
Quote: 引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
有这么精确吗


最好是用 #9。 
#10 的可以, 但如果有索引却用不到。

或者 :
select * from test 
where dd >= '2017/4/13 10:32:37.000' AND dd < '2017/4/13 10:32:38'

#13


用convert 转下 日期格式

#14


时间比较可以试试用Datediff函数

IF  DATEDIFF(MILLISECOND,GETDATE(),GETDATE())=0
BEGIN
    PRINT 'Same time'
END

#1


不会的,

表中DATE有一个相等字段 

这个列,数据类型是什么类型?

#2


引用 1楼卖水果的net 的回复:
不会的,

表中DATE有一个相等字段 

这个列,数据类型是什么类型?
datetime类型的

#3



-- 方便贴些数据上来吗 ?

create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36', 'xxx'),
('2017/4/13 10:32:37', 'yyy'),
('2017/4/13 10:32:38', 'zzz')
go
select * from test where dd = '2017/4/13 10:32:37'
go
drop table test 
go

(3 行受影响)
dd                      name
----------------------- ----------
2017-04-13 10:32:37.000 yyy

(1 行受影响)


#4



-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


#5


可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'

#6


引用 4楼卖水果的net 的回复:

-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 标

#7


引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 表

#8


引用 4楼卖水果的net 的回复:

-- 是不是还有毫秒?


create table test(dd datetime, name varchar(10))
go
insert into test values
('2017/4/13 10:32:36.000', 'xxx'),
('2017/4/13 10:32:37.123', 'yyy'),
('2017/4/13 10:32:38.100', 'zzz')
go
print '-- 条件 '
select * from test where dd = '2017/4/13 10:32:37'
go
print '-- 所有数据'
select * from test
go
drop table test 
go


(3 行受影响)
-- 条件 
dd                      name
----------------------- ----------

(0 行受影响)

-- 所有数据
dd                      name
----------------------- ----------
2017-04-13 10:32:36.000 xxx
2017-04-13 10:32:37.123 yyy
2017-04-13 10:32:38.100 zzz

(3 行受影响)


查询的时候怎么去除毫秒位

#9


引用 6 楼 loveqise 的回复:
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 标


select * from test 
where dd between '2017/4/13 10:32:37.000' and '2017/4/13 10:32:37.999'
go

#10


引用 7 楼 loveqise 的回复:
怎么查到毫秒位,我是直接讲DATE字段查询结果复制出来作为条件,用SELECT DATE FROM 表


where convert(varchar,[字段名],120)='2017-04-13 10:32:37'

#11


引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
有这么精确吗

#12


引用 11 楼 cjws555 的回复:
Quote: 引用 5楼唐诗三百首 的回复:
可能是字段值的秒之后还有毫秒值, 例如 2017/4/13 10:32:37 .123

查询时需精确匹配到毫秒值, 如 where [字段名]='2017/4/13 10:32:37.123'
有这么精确吗


最好是用 #9。 
#10 的可以, 但如果有索引却用不到。

或者 :
select * from test 
where dd >= '2017/4/13 10:32:37.000' AND dd < '2017/4/13 10:32:38'

#13


用convert 转下 日期格式

#14


时间比较可以试试用Datediff函数

IF  DATEDIFF(MILLISECOND,GETDATE(),GETDATE())=0
BEGIN
    PRINT 'Same time'
END