以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  视图里增加列  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=51171)

--  作者:fubblyc
--  发布时间:2014/5/21 10:57:00
--  视图里增加列

各位老师好,我想在视图里增加列【出生日期】,数据类型 为 日期  ,取值为 出生月 & "-" & 出生日   。 或者   出生年 & “-” 出生月 & "-" & 出生日  也行

 


图片点击可在新窗口打开查看此主题相关图片如下:视图增加列.jpg
图片点击可在新窗口打开查看

 

有的数据不全。。。


图片点击可在新窗口打开查看此主题相关图片如下:有的数据不全.jpg
图片点击可在新窗口打开查看
 

不知道该咋做呢。。。

[此贴子已经被作者于2014-5-21 11:13:25编辑过]

--  作者:有点甜
--  发布时间:2014/5/21 11:05:00
--  

 直接写

 

Cast(vcsm.fintBirthdayYear As varchar) + \'-\' + Cast(vcsm.fintBirthdayMonth as varchar) as 出生日期


--  作者:fubblyc
--  发布时间:2014/5/21 11:13:00
--  

有点甜老师,没有实现。。。

 
图片点击可在新窗口打开查看此主题相关图片如下:视图出错.jpg
图片点击可在新窗口打开查看


--  作者:fubblyc
--  发布时间:2014/5/21 11:18:00
--  
啊,知道了。我犯的低级错误。没有逗号。谢谢有点甜老师!!
--  作者:fubblyc
--  发布时间:2014/5/21 11:35:00
--  

有点甜老师,

现在遇到3个问题:

1、那增加的这个列,能指定数据类型为 日期 类型 的吗?

2、出生年 有的没有数据,不知道该怎么处理。能不能写成,要是 出生年 为空,则写成 1900  这样大家都知道是不真实的数字。

3、如果 出生月  出生日 两者任何一个的数据为空,则 出生日期 就显示为空。

 

视图这方面才刚开始接触。。不知道可以从哪里学到这方面的知识。。。

 

 


--  作者:有点甜
--  发布时间:2014/5/21 12:09:00
--  

测试了一下,可以。自己改。

 

select case when 月 is null or 日 is null then null else cast(cast(isnull(年,1900) as varchar) + \'-\' + cast(月 as varchar) + \'-\' + cast(日 as varchar) as datetime) end as 出生年月 from {test}


--  作者:fubblyc
--  发布时间:2014/5/21 12:37:00
--  

谢谢甜老师,

 

select case when 月 is null or 日 is null then null else cast(cast(isnull(年,1900) as varchar) + \'-\' + cast(月 as varchar) + \'-\' + cast(日 as varchar) as datetime) end as 出生年月 from {test} 

 

出现这样的错误:

[Err] 22007 - [SQL Server]从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

 

我把 datetime 改成 varchar  试一下是可以显示出来,但这不是我们想要的日期格式。

 

我改成 date , 出现如下错误:


图片点击可在新窗口打开查看此主题相关图片如下:不是系统类型.jpg
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2014/5/21 12:44:00
--  

sqlserver 没有date类型的,要用datetime。

 

再者,你的数据肯定有不合规范的数据,比如 月是23,日是40,这种数据。单独用少一点的数据测试吧。


--  作者:fubblyc
--  发布时间:2014/5/21 13:09:00
--  

哦哦。对的。是有不规范的。甜老师的语句有效。

 

那现在问题是  原来的这个ERP,他软件做的不规范,录入窗口没有做数据限制,导致了这种不规范的数据存在。

 

那我们现在能不能排除掉这些不规范的数据吗?

 

比如 出生月 不是 1~12 的,不显示

出生日 不是规范的就不显示,如:

1、 2月,平年28天,闰年29天。(用年份除以4,能除尽的29天,反之28天)

2、 大月 1~31   (1月、3月、5、7、8、10、11月) 小月1~30 (4月、6月、9月、12月)

 

 

哇,这个工程量应该好大啊。。。

 

这是原来的视图:(select 和 from {}在前后,就没有复制了)

 

 vcsm.fintBirthdayYear AS 出生年,
 vcsm.fintBirthdayMonth AS 出生月,
 vcsm.fintBirthdayDay AS 出生日,
 CASE
WHEN vcsm.fintBirthdayMonth IS NULL
OR vcsm.fintBirthdayDay IS NULL THEN
 NULL
ELSE
 CAST (
  CAST (isnull(vcsm.fintBirthdayYear, 1900) AS VARCHAR) + \'-\' + CAST (vcsm.fintBirthdayMonth AS VARCHAR) + \'-\' + CAST (vcsm.fintBirthdayDay AS VARCHAR) AS DATETIME
 )
END AS 出生年月,

 


--  作者:有点甜
--  发布时间:2014/5/21 14:26:00
--  

 请不要把这个操作放在视图里执行。

 

 你把所有数据加载到狐表里,用代码遍历所有的行,检测,并修改,把数据弄规范再说。

[此贴子已经被作者于2014-5-21 15:05:36编辑过]