急问一句SQL,关于日期格式的

AitStudio 2009-05-28 04:28:41
下面这个查询的结果只包括
NULL
2009-05-28
2009-05-28

SELECT     *
FROM s_starf
WHERE (s_protype = 40) AND (s_value IS NULL) OR
(s_protype = 40) AND (CAST(s_value AS datetime) < GETDATE())


因为数据库中s_value是nvarchar(250)类型,里面有非日期格式的记录。
我想找出所有s_value的值小于当前日期(2009-05-28)或者非日期格式(如2008.1之类的)记录

也就是要select * from s_starf where s_value<getdate() or s_value 不是日期 or s_value is null

这个SQL句子怎么写?
...全文
65 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JonasFeng 2009-05-28
  • 打赏
  • 举报
回复
isdate() 函数OK的。
SQL77 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 AitStudio 的回复:]
2楼的语句报错,查询结果为空。
怎么回事
[/Quote]

select * from s_starf
where (s_value <getdate() or isdate(s_value)=0 or s_value is null) and s_protype = 40

百年树人 2009-05-28
  • 打赏
  • 举报
回复
select * 
from s_starf
where (s_value <getdate() and isdate(s_value)=1) --是日期格式的小于当天
or isdate(s_value)=0 --或者不是日期格式的
or s_value is null --或者为空的
AitStudio 2009-05-28
  • 打赏
  • 举报
回复
2楼的语句报错,查询结果为空。
怎么回事
rockyvan 2009-05-28
  • 打赏
  • 举报
回复
轻罗小扇?
我一个高中女同学的QQ网名就叫“轻罗小扇”......
ks_reny 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rockyvan 的回复:]
利用ISDATE()函数即可。
ISDATE(s_value)=0即表示 s_value 不是日期。
[/Quote]
頂.
jia_guijun 2009-05-28
  • 打赏
  • 举报
回复
select * from s_starf where s_value <getdate() or isdate(s_value)=0 or s_value is null 
rockyvan 2009-05-28
  • 打赏
  • 举报
回复
利用ISDATE()函数即可。
ISDATE(s_value)=0即表示 s_value 不是日期。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧