壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 637|回复: 9

[财务] 地址 截取 换行 SQL怎么写??????

[复制链接]
发表于 2012/11/13 11:06:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
字符串: RM 3801, CABLE TV TOWER9 HOI SHING ROADTSUEN  WAN NTHONG KONG,  HK

-->
RM 3801, CABLE TV TOWER9 HOI SHING ROADTSUEN (44位)换行
WAN NTHONG KONG,  HK


以上是一串地址,
现在要将地址第一行显示不能超过44位,但是截取的时候不能将一个英文单词分开
如果算上最后一个单词超过44位,就截取该单词前面那个单词为止(根据空格来区分是否一个完整的单词),
如:RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG (50位)
--> RM 3801, CABLE TV TOWER9 HOI SHING WAN (38位)
NTHONG  KONG
如果加上 NTHONG 就变成 45位 ,所以要取他前面那个单词为止,换行

可写函数或SQL
发表于 2012/11/13 14:12:44 | 显示全部楼层
因为有事情没有测试其他例子,试试下面这个吧,可能有点长,可以改写一个get function应该能简化点。

可能还有其他简单的办法,目前我只能想到这个。


SELECT DECODE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',45,1),' ',SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)||CHR(10)||SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',46),SUBSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),1,INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',''))))||CHR(10)||SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ','')))+1))
                FROM DUAL
发表于 2012/11/13 14:55:37 | 显示全部楼层
修正版:

SELECT DECODE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',45,1),' ',SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)||CHR(10)||SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',46),SUBSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),1,INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',''))))||CHR(10)||TRIM(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',''))))))
  FROM DUAL
;
发表于 2012/11/13 15:12:58 | 显示全部楼层
再次修正:因为之前几次没有考虑第二行首字母是空格的出现,第二次加上一个但是还少了一个,这次应该没错了,剩下自己调试一下吧。

SELECT DECODE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',45,1),' ',SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)||CHR(10)||TRIM(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',46)),SUBSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),1,INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',''))))||CHR(10)||TRIM(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',INSTR(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',1,LENGTH(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44)) - LENGTH(REPLACE(SUBSTR('RM 3801, CABLE TV TOWER9 HOI SHING WAN NTHONG KONG',1,44),' ',''))))))
  FROM DUAL
 楼主| 发表于 2012/11/13 15:58:49 | 显示全部楼层
marusu 发表于 2012/11/13 15:12
再次修正:因为之前几次没有考虑第二行首字母是空格的出现,第二次加上一个但是还少了一个,这次应该没错了 ...

多谢!

我已经写了
select substr(
      'RM 3801, CABLE TV TOWER9 HOI SHINGROADTSUENWAN NTHONG KONG,  HK',1,
      instr(substr(
      'RM 3801, CABLE TV TOWER9 HOI SHINGROADTSUENWAN NTHONG KONG,  HK',1,44),
      ' ',-1)) result
      from  dual;
发表于 2012/11/13 16:11:13 | 显示全部楼层
只要一行吗?那我看错了。。。晕菜了。。。
 楼主| 发表于 2013/5/28 15:26:02 | 显示全部楼层
其实,后来发现 字符串中可以 用 CHR(10) 强制换行。。。。
发表于 2013/5/28 15:39:16 | 显示全部楼层
呵呵,够强大的啊
发表于 2013/5/28 15:44:10 | 显示全部楼层
最好是写成函数,可能会好些啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 13:09 , Processed in 0.016684 second(s), 13 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表