日期:2014-05-18  浏览次数:20433 次

日期cast,送分,抢分
select datediff(day,getdate(),cast(left('20071027',4)+'-'+right(left('20071027',6),2)+'-'+right('20071027',2) as datetime))

select datediff(day,getdate(),cast('20071027' as datetime))

----
以上转换都可以吗?8位的字符都这样这样操作吗?第二句稳定吗?麻烦各位测试一下,送分

------解决方案--------------------
都可以。不过建议采用第一种方式。

------解决方案--------------------
SQL code
--不用转都可以
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')

------解决方案--------------------
SQL code
select isdate('20070229') --> 0

--大家可能比较关心的是类似上面问题,大可不必担心,MS已经考虑了这些问题。

------解决方案--------------------


好多解法啊,人多星星也多,

哦,高升变星星了,恭喜恭喜

同意小楼的说法,cast可以隐式转换

------解决方案--------------------
select case isdate( '20071027 ') when 0 then 0 else datediff(day,getdate(), '20071027 ') end 
用这种方式过滤比较妥当
------解决方案--------------------
不好意思 借用一下你的地方和你的分
还有个问题 就是每个人输入的方式不同 比如说输入的 日期格式是错误的‘2007 10 24 ’这样就无法转换 能不能有个办法把里面的空格全去掉
------解决方案--------------------
--替换函数
replace()