Foxtable(狐表)用户栏目专家坐堂 → 视图里增加列


  共有3470人关注过本帖树形打印复制链接

主题:视图里增加列

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
视图里增加列  发帖心情 Post By:2014/5/21 10:57:00 [只看该作者]

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

 


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

 

有的数据不全。。。


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

不知道该咋做呢。。。

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/21 11:05:00 [只看该作者]

 直接写

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/21 11:13:00 [只看该作者]

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/21 11:18:00 [只看该作者]

啊,知道了。我犯的低级错误。没有逗号。谢谢有点甜老师!!

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/21 11:35:00 [只看该作者]

有点甜老师,

现在遇到3个问题:

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

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

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

 

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

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By: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
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/21 12:44:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By: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 出生年月,

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/21 14:26:00 [只看该作者]

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

 

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

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

 回到顶部
总数 18 1 2 下一页