银行系统发给我的定长字符串: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客户转账'--1SELECT 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实现
你的两行数我都没能和你的字段对应上,你的数据格式还算严格,应该可以提取
------解决方案--------------------