日期:2014-05-16  浏览次数:20656 次

如何截取字段的一部分生成新的字段?
如表a,有个字段b

b
办公室20
党办8
人力资源部13

能不能生成以下字段

c                d
办公室   20
党办     8
人力资源部 13
------解决方案--------------------
第一个问题:
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-03-28 07:52:15
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([b] nvarchar(14))
insert [A]
select N'办公室20' union all
select N'党办8' union all
select N'人力资源部13'
--------------生成数据--------------------------

select SUBSTRING(b,1,PATINDEX('%[0-9]%',b)-1)c ,SUBSTRING(b,PATINDEX('%[0-9]%',b),LEN(b))d
from [A]
----------------结果----------------------------
/*
c              d
-------------- --------------
办公室            20
党办             8
人力资源部          13 
*/

------解决方案--------------------
引用:
还有一个困扰我的问题。
假设有表a
id   考核人 指标序号 
1     王x           1
2    李x             2

表b
指标序号 得分
1                 3.0
2                 2.1

我现在问题的,表b的指标库,有可能是会变的,
那么一旦表b的记录变了,表a中相关的记录怎么保存下来?
比如2013年,我在表a中,产生了指标序号1的考核记录,
2014年,指标序号1不适用了,我将表b指标序号1的指标删掉了,
那么我如何保证表a中原有记录的完整性?
这个问题首先要确定,当你指标库的1删除之后,A中对应的数据是要保留还是不保留,如果需要一起删除,那么做个外键级联删除就可以了。如果要保留,可能需要做一个触发器,把对应的数据改变状态,用来标识“弃用”之类的意思