字符两两反转 比如 23452145转成 45214523

奋斗小青年 2014-03-19 01:17:01
字符两两反转 比如 23452145转成 45214523 像这样的转换 oracle和mysql有自带的函数吗?求帮助
...全文
243 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
流浪川 2014-03-20
  • 打赏
  • 举报
回复
引用 14 楼 wanyuan19890515 的回复:
[quote=引用 13 楼 hidanger521 的回复:] [quote=引用 12 楼 wanyuan19890515 的回复:] mysql 不支持connect by 坑爹 [quote=引用 11 楼 hidanger521 的回复:]
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 - 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
最终答案哈,呵呵,用这个吧,好理解一点。。
[/quote] 这个我就没办法了,mysql基本上没用过。。[/quote] 有没有简单一点的sql [/quote] 我尽力了亲,这个sql不算复杂了啊。。
奋斗小青年 2014-03-20
  • 打赏
  • 举报
回复
引用 13 楼 hidanger521 的回复:
[quote=引用 12 楼 wanyuan19890515 的回复:] mysql 不支持connect by 坑爹 [quote=引用 11 楼 hidanger521 的回复:]
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 - 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
最终答案哈,呵呵,用这个吧,好理解一点。。
[/quote] 这个我就没办法了,mysql基本上没用过。。[/quote] 有没有简单一点的sql
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 12 楼 wanyuan19890515 的回复:
mysql 不支持connect by 坑爹 [quote=引用 11 楼 hidanger521 的回复:]
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 - 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
最终答案哈,呵呵,用这个吧,好理解一点。。
[/quote] 这个我就没办法了,mysql基本上没用过。。
奋斗小青年 2014-03-19
  • 打赏
  • 举报
回复
mysql 不支持connect by 坑爹
引用 11 楼 hidanger521 的回复:
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 - 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
最终答案哈,呵呵,用这个吧,好理解一点。。
流浪川 2014-03-19
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 - 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
最终答案哈,呵呵,用这个吧,好理解一点。。
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 9 楼 wanyuan19890515 的回复:
不会出现单数 [quote=引用 8 楼 hidanger521 的回复:] [quote=引用 7 楼 wanyuan19890515 的回复:] 这个不对啊 1245DFDF 转成 这样 DFDF4512
啊,理解错了,那如果出现单数怎么办啊?[/quote][/quote]

CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(A), ',', '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR,
                        LENGTH(SOURCE_STR) - (ROWNUM - 1) * 2 + 1,
                        2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2 + 1);
  RETURN(TARGET_STR);
END FUC_TURN_STR;
你要确定哈,否者结果可能会有差别
奋斗小青年 2014-03-19
  • 打赏
  • 举报
回复
不会出现单数
引用 8 楼 hidanger521 的回复:
[quote=引用 7 楼 wanyuan19890515 的回复:] 这个不对啊 1245DFDF 转成 这样 DFDF4512
啊,理解错了,那如果出现单数怎么办啊?[/quote]
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 7 楼 wanyuan19890515 的回复:
这个不对啊 1245DFDF 转成 这样 DFDF4512
啊,理解错了,那如果出现单数怎么办啊?
奋斗小青年 2014-03-19
  • 打赏
  • 举报
回复
这个不对啊 1245DFDF 转成 这样 DFDF4512
流浪川 2014-03-19
  • 打赏
  • 举报
回复
CREATE OR REPLACE FUNCTION FUC_TURN_STR(SOURCE_STR IN VARCHAR2)
  RETURN VARCHAR2 IS
  TARGET_STR VARCHAR2(4000);
BEGIN
  SELECT REPLACE(WMSYS.WM_CONCAT(SUBSTR(A, 2, 1) || SUBSTR(A, 1, 1)),
                 ',',
                 '')
    INTO TARGET_STR
    FROM (SELECT SUBSTR(SOURCE_STR, (ROWNUM - 1) * 2 + 1, 2) A
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH(SOURCE_STR) / 2 + 1);
  RETURN(TARGET_STR);
END FUC_TURN_STR;

SQL> SELECT FUC_TURN_STR('1245DFDF') T FROM DUAL;

T
----------------------------------
2154FDFD
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 4 楼 wanyuan19890515 的回复:
这方法还可以简化点不
和你讲讲原理哈,肯定要这个过程啊,你说迭代肯定要有吧。换位置肯定要有吧,换完位置还得拼接好吧。 所以呢,我认为呢不能,要不我给你封到函数里面,你直接调用得了。。
奋斗小青年 2014-03-19
  • 打赏
  • 举报
回复
这方法还可以简化点不
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 wanyuan19890515 的回复:
现在这边已经套了几层了,主要是想简单一点.有相关的函数可以用么?或者高效点的
没有现成,这个效率不会差啊,自定义一个函数被。。你可以试试。
奋斗小青年 2014-03-19
  • 打赏
  • 举报
回复
现在这边已经套了几层了,主要是想简单一点.有相关的函数可以用么?或者高效点的
流浪川 2014-03-19
  • 打赏
  • 举报
回复
引用 楼主 wanyuan19890515 的回复:
字符两两反转 比如 23452145转成 45214523 像这样的转换 oracle和mysql有自带的函数吗?求帮助
SQL行不,不行你把下面的sql放到函数里面封装一下吧。。

SELECT REPLACE(WMSYS.WM_CONCAT(SUBSTR(A, 2, 1) || SUBSTR(A, 1, 1)), ',', '')
  FROM (SELECT SUBSTR('23452145', (ROWNUM - 1) * 2 + 1, 2) A
          FROM DUAL
        CONNECT BY ROWNUM <= LENGTH('23452145') / 2 + 1)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧