日期:2014-05-19  浏览次数:20645 次

数据库怎么处理汉字和数字
sql   server数据库中在一个字段中有是有汉字+数字组成,汉字在前数字在后,我怎么把前面的汉字和后面数字分成两个字段,如下:
原字段列                                 汉字列                               数字列
中国123                                   中国                                   123
中国人民123456                     中国人民                           123456

现在有原字段列,需要把汉字列和数字列填上

------解决方案--------------------
update 表名 set
汉字列=left(原字段列,datalength(原字段列)-len(原字段列)),
数字列=right(原字段列,len(原字段列)*2-datalength(原字段列))
------解决方案--------------------
declare @t table(原字段列 varchar(100),汉字列 varchar(100),数字列 varchar(100))
insert @t(原字段列)
select '中国123 ' union all
select '中国人民123456 '
--更新
update @t set
汉字列 = substring(原字段列,1,patindex( '%[0-9]% ',原字段列)-1),
数字列 =substring(原字段列,patindex( '%[0-9]% ',原字段列),len(原字段列) - patindex( '%[0-9]% ',原字段列)+1)
--察看
select * from @t

/*结果
原字段列 汉字列 数字列
------------------------------------------------------
中国123 中国 123
中国人民123456 中国人民 123456
*/
------解决方案--------------------

--前提:原字段列是varchar类型,不是nvarchar类型

create table 表名(原字段列 varchar(100), 汉字列 varchar(100), 数字列 varchar(100))
insert into 表名 select '中国123 ', '中国 ', '123 '
insert into 表名 select '中国人民123456 ', '中国人民 ', '123456 '

update 表名 set
汉字列=left(原字段列,datalength(原字段列)-len(原字段列)),
数字列=right(原字段列,len(原字段列)*2-datalength(原字段列))


select * from 表名

drop table 表名


/*

中国123 中国 123
中国人民123456 中国人民 123456

*/
------解决方案--------------------
--数字列是int


--前提:原字段列是varchar类型,不是nvarchar类型

create table 表名(原字段列 varchar(100), 汉字列 varchar(100), 数字列 int)
insert into 表名 select '中国123 ', '中国 ', '123 '
insert into 表名 select '中国人民123456 ', '中国人民 ', '123456 '

update 表名 set
汉字列=left(原字段列,datalength(原字段列)-len(原字段列)),
数字列=cast(right(原字段列,len(原字段列)*2-datalength(原字段列)) as int)


select * from 表名

drop table 表名


/*

中国123 中国 123
中国人民123456 中国人民 123456

*/


------解决方案--------------------
如果原字段是nvarchar,则需要用二楼提供的方式处理。