为什么between qd_date and js_date 不存在?

sideking 2010-04-09 10:03:32
where '2010-03-17' between qd_date and js_date


明明有2010-03-17 啊
...全文
73 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
if object_id('tb') is not null
drop table tb
go
create table tb(id datetime,id2 datetime)
insert into tb
select '2010-3-7','2010-3-9'


select * from tb where '2010-3-5' between id and id2
我的好像能查出数据啊,楼主用的什么版本数据库啊,我是用的2005
obuntu 2010-04-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 acupofnescafe 的回复:]

谁说楼主的语法不正确啦?字段行,当然常量也行
只不过,楼主提供的前后日期是标准的日期类型的话,与常量日期字符串比较时会出现问题.
因为常量字符串'2010-03-17' 隐式转换成日期类型时,时间是2010-03-17 00:00:00.000
如果这个时间不在日期区间内,就不会有结果了.
楼主再好好看看自己的日期区间字段吧.
[/Quote]

up
幸运的意外 2010-04-10
  • 打赏
  • 举报
回复
谁说楼主的语法不正确啦?字段行,当然常量也行
只不过,楼主提供的前后日期是标准的日期类型的话,与常量日期字符串比较时会出现问题.
因为常量字符串'2010-03-17' 隐式转换成日期类型时,时间是2010-03-17 00:00:00.000
如果这个时间不在日期区间内,就不会有结果了.
楼主再好好看看自己的日期区间字段吧.
rfq 2010-04-10
  • 打赏
  • 举报
回复
应当可以
select * from sys.objects where '2008-1-1' between create_date and modify_date

Mr_Nice 2010-04-09
  • 打赏
  • 举报
回复
没注意,tony哥的头像换了啊。‘
htl258_Tony 2010-04-09
  • 打赏
  • 举报
回复
--字符串格式
if object_id('tempdb..#','U') is not null
drop table #;
go
create table #(qd_date varchar(20), js_date varchar(20))
insert into #
select '2010-3-17','2010-3-20'

select *
from #
where
'2010-03-17' between qd_date and js_date

/*
qd_date js_date
-------------------- --------------------

(0 行受影响)
*/
字符串格式可能存在这样的情况
老黎 2010-04-09
  • 打赏
  • 举报
回复
字符串格式和时间格式,结果都正确,看6楼
我的数据库是2005的
老黎 2010-04-09
  • 打赏
  • 举报
回复

--时间格式
if object_id('tempdb..#','U') is not null
drop table #;
go
create table #(qd_date datetime, js_date datetime)
insert into #
select '2010-03-17','2010-03-20'

select *
from #
where '2010-03-17' between qd_date and js_date

--字符串格式
if object_id('tempdb..#','U') is not null
drop table #;
go
create table #(qd_date varchar(20), js_date varchar(20))
insert into #
select '2010-03-17','2010-03-20'

select *
from #
where
'2010-03-17' between qd_date and js_date

--结果
/*
(1 行受影响)
qd_date js_date
----------------------- -----------------------
2010-03-17 00:00:00.000 2010-03-20 00:00:00.000

(1 行受影响)


(1 行受影响)
qd_date js_date
-------------------- --------------------
2010-03-17 2010-03-20

(1 行受影响)
*/
htl258_Tony 2010-04-09
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-09 22:58:22
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([NO] INT,[qd_date] DATETIME,[js_date] DATETIME)
INSERT [tb]
SELECT 1,N'2010-03-02',N'2010-03-20' UNION ALL
SELECT 2,N'2010-03-22',N'2010-03-25'
GO
--SELECT * FROM [tb]

-->SQL查询如下:
select * from tb where '2010-03-17' between qd_date and js_date
/*
NO qd_date js_date
----------- ----------------------- -----------------------
1 2010-03-02 00:00:00.000 2010-03-20 00:00:00.000

(1 行受影响)
*/
经测试验证,语法不存在问题。可能是你的日期格式是字符型的或其它原因。
wqmgxj 2010-04-09
  • 打赏
  • 举报
回复

where qd_date<='2010-03-17' and js_date >='2010-03-17'
--小F-- 2010-04-09
  • 打赏
  • 举报
回复
不能用where来判断 要用case ..when ..
sideking 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fan7421436 的回复:]
'2010-03-17'

?? where 这里应该接一个列名吧!
具体问题是什么?
[/Quote]

我是判断参数 '2010-03-17'
是否在起始日期qd_date 结束日期js_date 里面
fan7421436 2010-04-09
  • 打赏
  • 举报
回复
'2010-03-17'

?? where 这里应该接一个列名吧!
具体问题是什么?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧