Sqlserver 的日期格式的老问题,进来看看!!(100分)

  • 主题发起人 主题发起人 frankfang
  • 开始时间 开始时间
F

frankfang

Unregistered / Unconfirmed
GUEST, unregistred user!
Sqlserver 的日期格式的老问题,进来看看!!

问题描叙:
因为软件要发布给很多客户使用,客户的SQLSERVER DATABASE端
的日期格式会有多种的格式。
软件中又有许多的程序要用日期条件来查询和跑报表。
并且SQL WHERE 中的日期条件要为SQLSERVER DATABASE端的日期格式,
SQL才能正确的运行。

我需要的是:
所以我想要得到的是:用程序得到SQLSERVER DATABASE端的日期格式,
然后把where 中的日期条件转化为SQLSERVER DATABASE端的日期格式。

不知我有没有讲明白,不过这个问题真的困扰着我,并且是我必须要解决的
问题.
 
不用管客户端是什么日期格式,把它转为统一的yyyy-mm-dd格式字符串,并在前后
加上#号即。
VDate:tdate;
sqlstring:='.... where Datefield=#'+FormatDatetime('yyyy-mm-dd',Vdate)+'#';
 
为什么加了'#'会出现sql 语法错误!!
 
应该是#36吧
 
如果不怕麻烦的话可以把日期分开分别比较如:
...where year(datefield) = year(inputparam) and month(datefield) = month(inputparam) and ....
虽然麻烦,但是很管用
 
日期分开比较最省事。
 
SQLSERVER用convert函数,都可以转化为****-**-**格式
convert(char(10),datefield1,120)
详情请查阅SQLSERVER帮助.
 
怎样得到才能SQL SERVER DATABASE端的日期格式?
 
好像没有这么复杂。
SQL SERVER端的时间统一设置为 datatime 类型
客户端查询 凡是时间参数的。 都用 ParamByName('aDateTime').AsDateTime := ADatetime
解决就可以了

 
同意王老师的看法
我就这样用
 
直接formatdatetime('yyyy-mm-dd',dateparm)
is ok, not need '#',right?
try it again
 
#是ACCESS专用的日期格式表达式
SQL SERVER是不支持的!
至于说SQL SERVER用哪种日期表达式,自己定义吧
 
其实大家还没有明白日期字段在数据库中怎么表示的,
为什么数据库自己是不会自动弄错日期的呢?
答案很简单,不管Sqlserver,Access,Interbase,sysbase……
日期字段在保存数据的时候都是用数字表示的,
不单在数据库中间,在delphi,c++building,Vc,Vb等所有的编程语言日期变量也都是用数字表示的。
所以大家在使用日期型字段的时候根本不用把程序中间日期型变量转换成字符串形式的日期格式。
好象楼上的朋友的一个例子
VDate:tdate;
sqlstring:='.... where Datefield=#'+FormatDatetime('yyyy-mm-dd',Vdate)+'#';
这样的写法更本就是多余的,直接写成
sqlstring:='.... where Datefield='+IntToStr(Vdate);就可以了。
不存在要转换成标准日期字符格式表达形式!
其实tdate,ttime,tdatatiem就是一个数字,
整数部分表示日期,小数部分表示小时分秒,
如果大家明白这个道理,处理数据库的日期型字段就更加游刃有余了。
 
再补充一下,在例子中间
VDate:tdate;
sqlstring:='.... where Datefield=#'+FormatDatetime('yyyy-mm-dd',Vdate)+'#';
日期变量转换到字符型日期格式反而降低了数据库的执行效率,
数据库内因为日期字段是数字,上面的方法在执行过程中间,
数据库又必须把你的字符型日期格式再次转换到数字格式,
实际上FormatDatetime('yyyy-mm-dd',Vdate)是做了无用功的,
所以大家一定要改掉这个毛病直接写成
where Datefield='+IntToStr(Vdate)就可以了,绝对不会错的。
这样好处很大,也就不要去里什么格式问题了,2位表示年份还是4位来表示,
根据windows的系统设置,在用户界面上可以自动显示了。
实际上也谈不上什么好处的问题,本来就是应该这么写。
where Datefield=#'+FormatDatetime('yyyy-mm-dd',Vdate)+'#';的写法实际上就是一个错误。
 
能否告诉我如何得到sql database端的日期格式的设定?
 
就這樣了
 
后退
顶部