在Delphi5通过SQL来实现查询年/月/日在MSSQL7.0表的日期字段中的问题(200分)

  • 主题发起人 主题发起人 hay
  • 开始时间 开始时间
H

hay

Unregistered / Unconfirmed
GUEST, unregistred user!
1.为何在SQL Explorer中能用如select * from 表 where Year(日期字段)='年份',同理,可以用Month与Day来取相应的月份与日期,来提取相关的数据(查询SQL7.0数据库),而在ClientDataSet.CommandText中的SQL语句却罢工(SQL7.0数据库),同样如果用上一命令在Explorer中查询Paradox数据表时,也不能够操作;如果用Delph5中SQL语言的函数EXTRACT时(如:select EXTRACT(YEAR FROM 日期字段) From Table.在MSSQL7.0时不能通过,但在Paradox表中能通过).能告诉我Why?
2.如何用Delphi5通过SQL来实现查询年月份在MSSQL7.0 中,好像它们各自为政,各有各的函数却相互不能沟通.
 
1.year在Delphi 5中是关键字。在Paradox中没有提供Year函数。
2.select * from table1 where years(日期字段)='年份';
select * from table1 where monthname(日期字段) = '月份';...
 
怎么用上述方法时会告诉Capability not supported ,怎么不支持呢?我在
SQL Explorer和在程序中都不能,都提示上面的错误.是哪里出问题?
在SQL Explorer对MSSQL7.0表进行操作时出现:'years' is not recongnized function name好像不行.在对Paradox表进行操作时出现:Capability not suppored.
 
错了!
关于SQL SERVER的SQL语句,DELPHI是直接发给SQL SERVER,由SQL SERVER
来解释该语句并执行的。

但是象PARADOX和DBASE这类数据库,DELPHI中称之为“LOCAL DATABASE”,
相应地有一个“LOCAL SQL HELP”,对这两个数据库操作的SQL语句,是一组专门的SQL语句,是由DELPHI负责解释并执行的。

YEAR、MONTH等函数是SQL SERVER中的函数,DELPHI并不会也不能解释和执行它,
反过来,EXTRACT函数是LOCAL DATABASE的,是DELPHI解释并执行的,它在
SQL SERVER 中也不对。
 
哪我该如何用Delphi5检索MS SQL7.0中日期字段中的年,月,日的数据.yck所指教
的区别本人认为有道理,我也在Delphi的在线文档中查过相关的内容.但遇到这种
问题该如何处理呢?
 
在MS SQL的表中建立2个新的字段AYear, AMonth.在写一个触发器在纪录插入后,自动的将年和月分解到2个字段中。
 
try this:
select * from yourTable
where datepart(yy,dateColumn)=2000
and datepart(mm,dateColumn)=10
and datepart(dd,dateColumn)=15

//2000-12-15

DATEPART(datepart, date)
Returns an integer representing the specified date part
(datepart) of the specified date (date).
Date part Abbreviation Values
year yy 1753-9999
quarter qq 1-4
month mm 1-12
day of year dy 1-366
day dd 1-31
week wk 1-53
weekday dw 1-7 (Sun.-Sat.)
hour hh 0-23
minute mi 0-59
second ss 0-59
millisecond ms 0-999
 
yushaofei的建议是可行的,但是比较麻烦,不是非常理想.
wumeng所述的方法,在SQL7.0中能够通过,但用delphi5.0的SQL语句来执行
是行不通的.原因就正如yck所讲的哪样.
不过经过几天的思考,终于想了一个办法来解决:
因为它们各自的函数都不能很好的两者结合起来用,
SQL7.0(year,month,day,Datepart...)与delphi5.0所支持Paradox的(
EXTRACT...).
我在后台SQL7.0中写了一个YearAndMonth的存储过程,利用SQL7.0对日期函数
的强大支持如下:
CREATE PROCEDURE YearAndMonth
@cnf smallint,
@cyf smallint
AS
select * from tablename
where Khno=@khno and year(日期字段)=@cnf and month(日期字段)=@cyf
不知大家还有什么其它更好的办法,不然我开始送分!!!
下面顺便问一下,为何delphi5.0进行异构数据库查询时会经常当机呢.
举个例子:用delphi5.0查询SQL7.0与本地Paradox数据库时,如:
select a.a1,b.b1
From ":SQL1:Database1" a ":PDOX:Database1" b
where a1=true
大家讨论讨论.
 
也没人来关注此问题,上面的一个小问题,我看只有慢慢想办法啦!
不过非常感谢以上各位对此问题的讨论,现在论功行赏:
 
select * from table1 where (日期字段) = #年月日#
是不是问这个?
 
我有点不明白,我使用
select * from Temp where Year(Tempdate)=2000

select Year(Tempdate)=2000 from Temp
以及month day函数均可以在DELPHI 5的QUERY里实现,你到底有什么问题?
干吗写那些存储过程???!◎#¥%
另外YEAR之类的函数返回整数,你别写错了
 

使用 带参数的 convert 函数


convert(char(4),日期字段,20)

convert(char(4),日期字段,20)

convert(char(4),日期字段,20)

====================================
convert 的使用方法
====================================

CONVERT (data_type[(length)], expression [, style])

style
Is the style of date format you want when converting datetime
or smalldatetime data to character data (nchar, nvarchar, char,
varchar, nchar, or nvarchar data types), or the string format
when converting float, real, money, or smallmoney data to character
data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types).
In the table, the two columns on the left represent the style values
for datetime or smalldatetime conversion to character data. Add 100
to a style value to get a four-place year that includes the century (yyyy).



Without
century
(yy) With
century
(yyyy)

Standard

Input/Output**
- 0 or 100 (*) Default mon dd yyyy hh:miAM (or PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 British/French dd/mm/yy
4 104 German dd.mm.yy
5 105 Italian dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 or 109 (*) Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM (or PM)
10 110 USA mm-dd-yy
11 111 JAPAN yy/mm/dd
12 112 ISO yymmdd
- 13 or 113 (*) Europe default + milliseconds dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 or 120 (*) ODBC canonical yyyy-mm-dd hh:mi:ss(24h)
- 21 or 121 (*) ODBC canonical (with milliseconds) yyyy-mm-dd hh:mi:ss.mmm(24h)
* The default values (style 0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121)
always return the century (yyyy).
** Input when converting to datetime; Output when converting to character data.


 
sorry
>>月
>> convert(char(4),日期字段,20)

convert(char(7),日期字段,20)

>>日
>> convert(char(4),日期字段,20)

convert(char(10),日期字段,20)
 
多人接受答案了。
 
后退
顶部