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


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

主题:视图里增加列

帅哥哟,离线,有人找我吗?
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编辑过]

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


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

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

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


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


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

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

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


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

有点甜老师,

现在遇到3个问题:

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

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

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

 

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

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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 出生年月,

 


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/21 14:56:00 [显示全部帖子]

好的。谢谢有点甜老师!!我再 研究一下。

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/23 12:23:00 [显示全部帖子]

以下是引用有点甜在2014-5-21 14:26:00的发言:

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

 

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

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

有点甜老师,因为这个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月)

 

这种思路可否?

 


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/23 13:00:00 [显示全部帖子]

月份的可以实现。我再看下 出生日的

 

WHEN vipconsumer.fintBirthdayMonth IS NULL
or vipconsumer.fintBirthdayMonth  not In ('1','2','3','4','5','6','7','8','9','10','11','12')
OR vipconsumer.fintBirthdayDay IS NULL THEN
 NULL
ELSE
 CAST (
  CAST (isnull(vipconsumer.fintBirthdayYear, 1900) AS VARCHAR) + '-' + CAST (vipconsumer.fintBirthdayMonth AS VARCHAR) + '-' + CAST (vipconsumer.fintBirthdayDay AS VARCHAR) AS VARCHAR
 )
END AS 出生日期,


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2014/5/23 13:32:00 [显示全部帖子]

搞定,只是少了 闰年的2月29日,不过这一天生日的应该很少,就先忽略掉吧。不然 还不知道怎么写 2月,平年28天,闰年29天。(用年份除以4,能除尽的29天,反之28天)

 

 CASE
WHEN vipconsumer.fintBirthdayMonth IS NULL
OR vipconsumer.fintBirthdayMonth NOT IN (
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '12'
)
OR vipconsumer.fintBirthdayDay IS NULL
OR (
vipconsumer.fintBirthdayMonth IN (
 '1',
 '3',
 '5',
 '7',
 '8',
 '10',
 '12'
)
AND vipconsumer.fintBirthdayDay NOT IN (
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '12',
 '13',
 '14',
 '15',
 '16',
 '17',
 '18',
 '19',
 '20',
 '21',
 '22',
 '23',
 '24',
 '25',
 '26',
 '27',
 '28',
 '29',
 '30',
 '31'
)
)
OR (
vipconsumer.fintBirthdayMonth IN (
 '4',
 '6',
 '9',
 '11'
)
AND vipconsumer.fintBirthdayDay NOT IN (
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '12',
 '13',
 '14',
 '15',
 '16',
 '17',
 '18',
 '19',
 '20',
 '21',
 '22',
 '23',
 '24',
 '25',
 '26',
 '27',
 '28',
 '29',
 '30'
)
)
OR (
vipconsumer.fintBirthdayMonth IN (
 '2')
AND vipconsumer.fintBirthdayDay NOT IN (
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '12',
 '13',
 '14',
 '15',
 '16',
 '17',
 '18',
 '19',
 '20',
 '21',
 '22',
 '23',
 '24',
 '25',
 '26',
 '27',
 '28'
)
)

THEN
 NULL


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