以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 这条SQL查询怎么写?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=1143)

--  作者:wcs
--  发布时间:2008/11/15 19:42:00
--  [求助] 这条SQL查询怎么写?
源表A:(外部sql数据库中)
a               b             c
2008         10           4
2008           4          24

我想得到的表B:
a              b              c               d
2008       10            4              2008-10-4
2008       4             24             2008-4-24


其中:a、 b、 c为整数列,我希望查询出来的d 为日期列 

我写了这样的一个查询:
select  a,b,c,concat(a,"-",b,"-",c) as d form[表A]
结果不能执行。

有高手知道这条查询如何写吗?


--  作者:eric803
--  发布时间:2008/11/15 20:11:00
--  
 select a,b,c,cast(a as char(4))+\'-\'+cast(b as varchar(2))+\'-\'+cast(c as varchar(2)) as d from [表A]

--  作者:wcs
--  发布时间:2008/11/15 20:41:00
--  

谢谢,我测试了一下,是可以执行的。

能解释一下char()   和  varchar()  的意思吗?

同时,我在这条查询语句中加了一个where,就不能执行了,

select a,b,c,cast(a as char(4))+\'-\'+cast(b as varchar(2))+\'-\'+cast(c as varchar(2)) as d from [表A] where d = \'2008-10-4\'

程序提示d 列不存在。


我的数据源中的年、月、日是分别放在不同的列中的,如上例。 我在查询时希望把它们整到一起,同时按日期来筛选查询结果。
为解决这个问题,还有别的适合的查询语句吗?

[此贴子已经被作者于2008-11-15 20:44:39编辑过]

--  作者:yuanbin
--  发布时间:2008/11/16 11:54:00
--  
在以上基础上有2种写法:
1、select a.* from (select a,b,c,cast(cast(a as char(4))+\'-\'+cast(b as char(2))+\'-\'+cast(c as char(2)) as datetime) as d from 表A) as a where d=\'2008-10-4\'

2、select a,b,c,cast(cast(a as char(4))+\'-\'+cast(b as char(2))+\'-\'+cast(c as char(2)) as datetime) as d from 表A  where cast(cast(a as char(4))+\'-\'+cast(b as varchar(2))+\'-\'+cast(c as varchar(2)) as datetime)=\'2008-10-4\'

char 和 varchar  字符数据类型说明:固定长度用char,可变长度用varchar。


--  作者:wcs
--  发布时间:2008/11/16 17:09:00
--  
问题已经解决,谢谢!

有一个经验总结,已发贴!