`

[转]把字母数字串转换为数值

 
阅读更多

http://www.blogjava.net/jxhkwhy/articles/200495.html

问题:对于字母数字的数据,只返回数字值。从字符串“paul123f321”中返回123321。

解决方案

DB2

使用函数TRANSLATE和REPLACE,从字母数字串中提取数字字符:

 select cast(

         replace(

       translate( 'paul123f321',

                  repeat('#',26),

                  'abcdefghijklmnopqrstuvwxyz'),'#','')

         as integer ) as num

    from t1


Oracle和PostgreSQL

使用函数TRANSLATE和REPLACE,可以从包含字母数字的字符串中提取数字字符:

 select cast(

         replace(

       translate( 'paul123f321',

                  'abcdefghijklmnopqrstuvwxyz',

                 rpad('#',26,'#')),'#','')

         as integer ) as num

   from t1 
  

MySQL和SQL Server

到本书编写时为止,这两个供应商都不支持TRANSLATE函数,因此这里不能给出解决方案了。

讨论

两种解决方案的唯一差别是语法,DB2使用函数REPEAT代替RPAD,而且TRANSLATE参数列表的顺序也不同。以下的解释采用了Oracle/PostgreSQL解决方案, DB2也类似。如果从里向外运行该查询(仅仅从TRANSLATE开始),就会发现这非常简单。首先,TRANSLATE把非数字字符转换为“#”:

select translate( 'paul123f321',

                   'abcdefghijklmnopqrstuvwxyz',

                   rpad('#',26,'#')) as num

   from t1


NUM

-----------

####123#321

由于现在所有非数字字符都用“#”表示了,因此只需使用REPLACE去掉它们,然后把结果转换为数值。这个特殊的例子尤其简单,因为字符串中只有字母和数字。如果还有其他字符,那么用另一种方法会更容易:不是找出非数字字符并去掉它们,而是找出所有数字字符,并去掉不属于这些字符范围的其他字符。下面的例子会有助于理解这种技巧:

select replace(

      translate('paul123f321',

        replace(translate( 'paul123f321',

                           '0123456789',

                           rpad('#',10,'#')),'#',''),

                rpad('#',length('paul123f321'),'#')),'#','') as num

   from t1


NUM

------

123321

较之原始方案,该解决方案看起来有点儿费解,但如果把它分解开来就容易理解了。观察一下最内层的TRANSLATE调用:

select translate( 'paul123f321',

                   '0123456789',

                   rpad('#',10,'#'))

   from t1


TRANSLATE('

-----------

paul###f###

与原来方案不同的是,它没有用“#”字符替换每个非数字字符,而是用“#”字符替换所有数字字符。接下来,去掉所有“#”,这样,只剩下非数字字符:
select replace(translate( 'paul123f321',

                           '0123456789',

                           rpad('#',10,'#')),'#','')

   from t1


REPLA

-----

paulf

下一步,再次调用TRANSLATE,这次用“#”字符替换原始字符串中的所有非数字字符(前面查询的结果):

select translate('paul123f321',

        replace(translate( 'paul123f321',

                           '0123456789',

                           rpad('#',10,'#')),'#',''),

                rpad('#',length('paul123f321'),'#'))

   from t1


TRANSLATE('

-----------

####123#321

到这里停一停,检验一下最外层的TRANSLATE调用。RPAD的第二个参数(DB2中REPEAT的第二个参数)是原始字符串的长度。这样做很方便,因为是没有任何字符出现的次数会比它所在的整个字符串长。现在,用“#”字符替换所有非数字字符;最后一步,使用REPLACE去掉所有“#”。至此,仅剩下数字。

_______________________________________

考虑小数点的话 把 ‘0123456789’ 换成 ‘.0123456789 ’
不过潜在着小数点位置的问题、暂不考虑。
分享到:
评论

相关推荐

    oracle 如何判断一个字符串能否转换为数字?

    根据Oracle官方文档和提供的错误信息,我们可以得知该错误发生的根本原因是尝试将一个非数值型的字符串转换为数字时失败了。具体来说: - **错误原因**:当尝试将一个字符型字段转换为数字时,如果该字段包含的不是...

    英文字母与数字的相互转换

    这种转换有时被称为字母数字编码,特别是在需要将字符序列转换为数值表示或反之亦然的场景下。例如,在网络通信、密码学、数据存储以及各种算法实现中,这种转换都发挥着关键作用。 在给定的标题“英文字母与数字的...

    数字转换成大写字母代码

    根据给定的信息,本文将对“数字转换成大写字母代码”的实现原理及代码细节进行深入解析,旨在帮助初学者理解这一有趣而实用的技术。 ### 一、代码功能概述 该程序的主要目的是将输入的浮点数转换为一系列特定的...

    CVI串口字符串16进制转换

    在16进制中,每个数字或字母对应4位二进制数,因此可以表示0到255的数值,涵盖了ASCII码的全部范围。转换过程就是将每个字符的ASCII码转换成相应的16进制数。 在CVI中实现这个转换,可以采用以下步骤: 1. **读取...

    matlab_将excel列号转换为字母坐标

    在某些情况下,我们可能需要在MATLAB中将Excel的列号转换为字母坐标,以便更好地理解和操作数据。下面将详细解释如何在MATLAB中实现这一转换。 `num2column.m`这个文件很可能包含了实现此功能的MATLAB代码。通常,...

    ASCII转换至十六进制字符串与二进制字符串显示_labview_字符串转换_

    1. **十六进制转整数**:使用“Hex String to Integer”函数,将十六进制字符串转换为对应的十进制整数。 2. **整数转二进制**:接着,利用“Integer to Binary String”函数,将十进制整数转换为二进制字符串。 3. ...

    易语言十六进制与字符串转换

    2. **十六进制转字符串**:相反的过程需要先使用“十六进制到整数”函数将十六进制字符串转换为十进制,再用“整数到字符串”函数将十进制数值转化为字符串。需要注意的是,这里的“整数到字符串”可能会产生一个以...

    26字母与十进制转换

    在Java中,我们还可以使用`Integer.toString()`将数字转换为字符串,`Integer.parseInt()`或`Integer.valueOf()`将字符串转换为整数,以及`Character.toUpperCase()`和`Character.toLowerCase()`进行大小写的转换。...

    ASCII码和数字之间的相互转换

    例如,当你需要将一个字符(如字母或数字)转换为其对应的十进制或十六进制数值时,或者相反地,将一个十进制或十六进制数值转换回对应的ASCII字符时,就需要进行这种转换。 1. ASCII到十进制转换:每个ASCII字符都...

    PHP实现十进制数字与二十六进制字母串相互转换操作示例

    2. 将二十六进制字母串转换为十进制数字的函数`alpha2num`。这个函数接收一个二十六进制字母串作为参数。遍历该字符串时,根据字母是大写还是小写确定起始代码。对于每个字符,先将其转换为对应的数值,然后根据其...

    字母符号转换_字母符号转化_

    例如,将数字字符转换为整数值,或将控制字符如换行符('\n')转换为其对应的ASCII码值。理解这些基本的转换方法对于学习和使用C语言至关重要,因为它能帮助程序员更好地控制和处理字符数据。 总之,“字母符号转换”...

    字母与ASCII转换

    同样,`char.Parse(string)`和`Char.TryParse(string, out char)`可以将字符串转换为字符,而`ToString()`方法可以将字符转换为字符串。 了解字母与ASCII的转换对于处理文本数据非常有用,例如在排序、加密或解密...

    用Labview将4字节16进制数转换成10进制数

    在实际应用中,你可能会发现LabVIEW已经内置了“16进制到数值”函数,可以直接将16进制字符串转换为数值,无需自定义VI。但如果是处理特殊格式或者需要理解转换过程,创建自定义VI会更有价值。 总之,"用Labview将4...

    用c语言将小写字母变大写字母

    根据给定的信息,我们可以深入探讨如何使用C语言(尽管题目提到的是C++,但实际代码是基于C语言的)来实现将字符串中的小写字母转换为大写字母的功能。这涉及到字符编码、条件判断以及字符串处理等核心概念。 ### ...

    matlab开发-罗马数字阿拉伯数字转换

    在MATLAB编程环境中,开发罗马数字与阿拉伯数字之间的转换功能是一项常见的练习,它涉及字符串处理和数值计算。本文将深入探讨这一主题,并基于提供的文件名`num2rom.fig`、`num2rom.m`和`license.txt`进行解析。 ...

    javascript将16进制的字符串转换为10进制整数hex.docx

    例如,如果想要将一个16进制字符串转换为10进制整数,则可以这样操作: ```javascript var hexStr = "FF"; var decimal = parseInt(hexStr, 16); // 结果为255 ``` #### 2. 自定义函数实现 除了使用内置函数外,...

    javascript字符型转换成整型

    `parseFloat()` 与 `parseInt()` 都用于将字符串转换为数字,但两者之间存在一定的差异: - `parseInt()` 只提取整数部分,并且默认以十进制解析。 - `parseFloat()` 会提取所有有效数字,包括小数部分。 例如: ``...

    step7-300 16进制转换成字符串

    例如,可以使用`CONV`函数将16进制数值转换为ASCII字符串,或者通过循环读取每一位16进制数字,并转换成相应的ASCII字符。 3. **ASCII编码**:16进制数字对应的ASCII码是其对应的字符,例如,16进制的'48'在ASCII码...

    一款MFC软件将输入的ASCII串转换为十进制或十六进制

    在编程时,开发者也可能需要将ASCII字符串转换为数值来执行特定操作,比如计算哈希值或进行加密解密过程。此外,这种转换在数据分析、日志记录以及调试过程中也十分常见。 在压缩包中,我们看到的"Debug"通常是指...

    labview字符串大小写转换

    使用labview实现字符串大小写转换,开发环境为labview8.2

Global site tag (gtag.js) - Google Analytics