很简单的sql语句为何出问题?(50分)

  • 主题发起人 主题发起人 gzccjz
  • 开始时间 开始时间
G

gzccjz

Unregistered / Unconfirmed
GUEST, unregistred user!
select * from sal.salrecode_detail where time_stamp like '2008-03%'

为何我得出的记录是空白??? 明明有这个时间的数据
 
你的time_stamp字段类型是字符串?如果是日期类型不能这么写like '2008-03%'。
 
time_stamp是什么类型的?
如果是字符串型,这样应该没错
如果是日期型,那就应该转换一下再比较
像你这句改成这样比较合适
select * from sal.salrecode_detail
where year(time_stamp)=2008 and month(time_stamp)=3
 
日期型要如何写?????
 
转换函数忘了
 
select * from sal.salrecode_detail
where convert(nvarchar(12),time_stamp) like '2008-03%'
 
access:
time_stamp >=#2008-03-01# and time_stamp<=#2008-03-31#
sqlserver:
time_stamp >='2008-03-01' and time_stamp<='2008-03-31'
好像可以这么写,试试,好久没写过SQL了[:)]
 
如果是DateTime可以这样写
select * from sal.salrecode_detail where left(convert(varchar(10),time_stamp,121),7) = '2008-03'

--MS SQL 2K上测试通过,嘿嘿。。。。
 
select * from sal.salrecode_detail
where convert(varchar(10), time_stamp, 120) like '2008-03%'
 
以上几位都是解决问题的方法,我都用过
 
你是针对什么数据库呢?
 
to gulang

你的方式只适合用一 ACCESS 数据库吧。。

如果是 SQL数据库,你这个就错了。
 
同意 轻舞肥羊
 
应该避免在where子句中对列使用函数,特别是建了索引的列,会降低效率。
 
同意gulang说法,特别对于表数据非常多的时候,这个时候应该使用检索标识位或则利用存储过程
 
to gulang:
不对列使用函数,那如何解决我这个问题??请指教
 
不同的数据库使用SQL语句的格式也是不同的,如果你用的是ACCESS数据库,那么在用sql查询时,日期型的要加“#”号,如果是server数据库,那就用单引号''具体事例楼上的都已经写了!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部