sql - 如何从 SQL 结果中提取数值数据

标签 sql db2

假设有一个包含 2 列的表“A”- ID (INT)、DATA (VARCHAR(100))。 在表格中执行“SELECT DATA FROM A”结果如下:

DATA
---------------------
Nowshak 7,485 m
Maja e Korabit (Golem Korab) 2,764 m
Tahat 3,003 m
Morro de Moco 2,620 m
Cerro Aconcagua 6,960 m (located in the northwestern corner of the province of Mendoza)
Mount Kosciuszko 2,229 m
Grossglockner 3,798 m
// the DATA continues...
---------------------

如何在 SELECT SQL 查询中使用某种字符串处理函数仅提取数字数据,以便修改后的 SELECT 的结果如下所示:

DATA (in INTEGER - not varchar)
---------------------
7485
2764
3003
2620
6960
2229
3798
// the DATA in INTEGER continues...
---------------------

顺便说一下,如果这可以在单个 SQL 语句中完成,那将是最好的。 (我使用的是 IBM DB2 9.5 版)

谢谢:)

最佳答案

我知道这个线程很旧,OP 不需要答案,但我必须通过这个线程和其他线程的一些提示来解决这个问题。他们似乎都缺少确切的答案。

执行此操作的简单方法是TRANSLATE所有不需要的字符为单个字符,然后用空字符串REPLACE该单个字符。

DATA = 'Nowshak 7,485 m'

# removes all characters, leaving only numbers
REPLACE(TRANSLATE(TRIM(DATA), '_____________________________________________________________________________________________', ' abcdefghijklmnopqrstuvwzyaABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()-_=+\|[]{};:",.<>/?'), '_', '')
 => '7485'

分解TRANSLATE命令:

TRANSLATE( FIELD or String, <to characters>, <from characters> )

例如

DATA = 'Sample by John'

TRANSLATE(DATA, 'XYZ', 'abc')
 => a becomes X, b becomes Y, c becomes Z
 => 'SXmple Yy John'

** 注意:我无法谈论性能或版本兼容性。我使用的是 DB2 的 9.x 版本,并且是这项技术的新手。希望这对某人有帮助。

关于sql - 如何从 SQL 结果中提取数值数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/596166/

相关文章:

mysql - 在同一 select 语句中计算具有不同条件的相同 id 列

sql - 过度分区以查找重复项并根据 SQL 标准删除它们

mysql - VB 数据库从 2 个不同的服务器插入

C#:DB2 首先测试可用连接

db2 - 在 rpgle 中将游标提取到数组中的性能缓慢

sql - 如何按行和列分组?

sql - 有没有更好的方法从 hh :mm:ss to hhmmss? 转换 SQL 日期时间

PHP 到 AS400 连接通过来自浏览器的 ODBC/PDO 错误

sql - 如何找到最近的日期?

mysql - 最大日期组按月、年和 ID 的累计总和