日期:2014-05-18 浏览次数:20476 次
--不用转都可以 select datediff(day,getdate(),'20071027')
------解决方案--------------------
只要 isdate('20071027')=1,执行 datediff() 函数时,SQL自动隐式转换。
不建议第一种,问题复杂化。
------解决方案--------------------
第二句中
cast('20071027' as datetime)
最好改为
convert(datetime,'20071027',112)
其中112为日期的yymmdd格式,相对只用cast不带格式参数安全性高
------解决方案--------------------
都可以.
不过,我还是建议使用第一种方法.
------解决方案--------------------
或者加个条件判断一下:
where isdate('20071207') = 1
------解决方案--------------------
第一种写复杂了点,就用最简单的方式就可以了
select datediff(day,getdate(),'20071027')
------解决方案--------------------
if isdate('20071027')=0,按第一种写法,后面串接成的日期,依然是非法日期,不存在第一种比第二种稳定的说法。
个人倾向最简单的写法,易读。
------解决方案--------------------
像9楼那样加isdate过滤一下.
------解决方案--------------------
select datediff(day,getdate(),'20071027')
------解决方案--------------------
select isdate('20070229') --> 0 --大家可能比较关心的是类似上面问题,大可不必担心,MS已经考虑了这些问题。
------解决方案--------------------
好多解法啊,人多星星也多,
哦,高升变星星了,恭喜恭喜
同意小楼的说法,cast可以隐式转换
------解决方案--------------------
select case isdate( '20071027 ') when 0 then 0 else datediff(day,getdate(), '20071027 ') end
用这种方式过滤比较妥当
------解决方案--------------------
不好意思 借用一下你的地方和你的分
还有个问题 就是每个人输入的方式不同 比如说输入的 日期格式是错误的‘2007 10 24 ’这样就无法转换 能不能有个办法把里面的空格全去掉
------解决方案--------------------
--替换函数
replace()