数据库怎么处理汉字和数字
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,则需要用二楼提供的方式处理。