日期:2014-05-17  浏览次数:20537 次

[SQLServer2008R2]select * From (select * from table) 嵌套查询问题
问题来源:
   1、用户需要一个字段来表示时间,但是时间date字段(字段名:sj)内可输入2013xxxx这种非数字字符的文本信息;
   2、(带来的问题)查询时如何查询?不能用传统的date或者int类型来查询,必须先处理在查询,这就带来了我的嵌套查询问题。
             
我解决用户问题的思路:
 1、数据库字段使用varchar;
 2、在数据库中使用嵌套查询来解决

select tmp.* From (select * From table_A Where PATINDEX('[0-9]%[0-9]',sj)=1 )as tmp )
Where Convert(int,tmp.sj) > 20130101

我的报错情况:
  1、报 tmp.sj 中存在‘2013xxxx’不能将其转换为int类型;
2、查看sqlserver2008R2环境中的数据查询结果窗口,我需要的数据出来了;(虽然结果可以出来,但是我通过VS.net2008写的程序不能得到结果,而且有报错信息,个人觉得不爽,也没觉得自己写错。)
请大家帮忙看看。谢谢
嵌套查询 varchar字符转换问题

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


还真是会出现转换2013xxxx失败的错误,真奇怪,2008是这样2000也是这样
我想只能这样转换一下了:
select * from(select case when isdate(sj)>0 then sj else '19000101' end as sj1,* from #tb where ISDATE(sj)>0)tmp
where CONVERT(int,sj1)>20130301