首页 新闻 会员 周边 捐助

sql 查询

0
悬赏园豆:30 [已解决问题] 解决于 2015-11-02 11:54
7 2015.03 1 169 322 1
8 -- -- -- 322 1
9 2015.03 -- 169 322 1

 

我想先过滤点法字符的数据,然后根据日期 查询
selec  *  from  表   where  日期  between    2015.01 and  2015.05 ,可是有非法字符,必须先过滤掉非法字符的数据,请哪位大侠帮忙!

sql
小洋哥868的主页 小洋哥868 | 初学一级 | 园豆:96
提问于:2015-10-31 17:19
< >
分享
最佳答案
0

如果你的类型是Datetime类型, 那不可能有特殊字符... 如果是varchar类型..就算有特殊字符..好像用between的查出正确的数据吧....

我试了一下. 好像是可以的..

收获园豆:20
李丶GuanYao | 小虾三级 |园豆:1228 | 2015-11-02 08:46

sql  server ,数据库字段是nvarchar类型,这些都是爬虫爬到的数据,爬到什么就插入什么数据,有的word和pdf 的数据就是有“--”,所有才会有非法字符,我需要用到 DateAdd(YYYY,-2,'日期'),这个函数不能转非法字符,所以我想知道解决办法,如果没有非法字符,就好说了,必须先过滤掉非法字符,在以日期为准,通过DateAdd(YYYY,-2,'日期'),查找以日期为准到两年前之内的数据!

小洋哥868 | 园豆:96 (初学一级) | 2015-11-02 09:27

@.net-yang: 

因为你的日期是年月 格式的 ..  所以好多函数都不能用了.. 所以暂时想不出什么好办法..

如果你的日期是 年月日格式的.. 可以用下面的语句. Date是 TestTable的一个字段.

SELECT * FROM dbo.TestTable
WHERE 1=(CASE WHEN ISDATE([Date])=1 AND [Date] BETWEEN DATEADD(YEAR,-2,GETDATE()) AND GETDATE() THEN 1 ELSE 0 END)

 

李丶GuanYao | 园豆:1228 (小虾三级) | 2015-11-02 09:41

@李丶GuanYao: 谢谢,还是有帮助,以后应该会用到!自己想到了办法,可能方法有点笨,我是先通过sql过滤掉非法字符的数据,然后通过程序来取时间,用>=符号来取时间段的数据,呵呵!

小洋哥868 | 园豆:96 (初学一级) | 2015-11-02 11:58
其他回答(2)
0

你用的什么数据库? 那个日期是什么类型的,为什么还会有非法字符,如果是char或varchar的,mysql执行上面的语句就可以。

收获园豆:10
之奇一昂 | 园豆:1421 (小虾三级) | 2015-10-31 18:01

sql  server ,数据库字段是nvarchar类型,这些都是爬虫爬到的数据,爬到什么就插入什么数据,有的word和pdf 的数据就是有“--”,所有才会有非法字符,我需要用到 DateAdd(YYYY,-2,'日期'),这个函数不能转非法字符,所以我想知道解决办法,如果没有非法字符,就好说了,必须先过滤掉非法字符,在以日期为准,通过DateAdd(YYYY,-2,'日期'),查找以日期为准到两年前之内的数据!

支持(0) 反对(0) 小洋哥868 | 园豆:96 (初学一级) | 2015-11-02 09:27
0

个人觉得还是在爬取的时候对该字段进行处理,不然数据库该字段的格式可能会有很多种,写出来的sql会很复杂。

火悬崖 | 园豆:434 (菜鸟二级) | 2015-11-02 11:23

谢谢,知道了,毕竟爬虫程序不是我来写,也没有必要要求那么多,对吧,呵呵!

支持(0) 反对(0) 小洋哥868 | 园豆:96 (初学一级) | 2015-11-02 11:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册