日期:2014-05-17  浏览次数:20660 次

substring中的汉字问题
银行系统发给我的定长字符串:5位帐号+10位姓名+5位金额+10位备注信息,我收到此字符串后保存至sql server表中,用substring拆分它,希望得到帐号、姓名、金额和备注信息。

问题在于:银行系统定义1个汉字占2个字节,姓名、备注信息中包含了汉字,原本应该
姓名 = 张三+8个空格
根据银行的定义,实际就变成了:
姓名 = 张三+6个空格

例如:
bankstring = "11111张三 22.22客户转账"

这样我用substring(bankstring,6,10)就取不到正确的姓名,同理也取不到正确的备注信息,再者,有的姓名还可能是三个字的,请问我该怎么写呢?感谢!


------解决方案--------------------
SQL code
DECLARE @s VARCHAR(30)
SET @s='11111张三      22.22客户转账'

SELECT SUBSTRING(@s,6,PATINDEX('%[^0-9][0-9]%',@s)-5)   --姓名


SELECT SUBSTRING(@s,PATINDEX('%[^0-9][0-9]%',@s),6)      --金额


SELECT SUBSTRING(@s,PATINDEX('%[^0-9][0-9]%',@s)+6,10)    --备注

------解决方案--------------------
如果金额不固定

SQL code

DECLARE @s VARCHAR(30)
SET @s='11111张三      22.22客户转账'
--1
SELECT SUBSTRING(SUBSTRING(@s,PATINDEX('%[^0-9][0-9]%',@s),15),0,PATINDEX('%[^0-9][吖-做]%',SUBSTRING(@s,PATINDEX('%[^0-9][0-9]%',@s),15)))
--3 备注
SELECT REVERSE(SUBSTRING(REVERSE(@s),0,PATINDEX('%[0-9]%',REVERSE(@s))))

------解决方案--------------------
我做过银行报文。
是在外部程序端实现解析。不要在数据库层实现。
------解决方案--------------------
数据从这两串数提取?
你先手动拆开一个示例,我们试试能不能用sql实现
你的两行数我都没能和你的字段对应上,你的数据格式还算严格,应该可以提取
------解决方案--------------------
探讨

感谢各位的回复,实际上比这个复杂,判断数字或者汉字的方法恐怕不行的
下面是实际的两条记录:

SQL code
00183000000000038 201209071122106223190210589245 王二 1177527.27 ……