我在DATA列(varchar)中有一些数据,看起来像这样:
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
我想要的是:
7485
2764
3003
2620
6960
2229
3798
- 在IBM DB2 9.5版本中是否有一种方法可以通过这样做来删除/删除所有非数字字母:**
SELECT replace(DATA, --somekind of regular expression--, '') FROM TABLE_A
- 或其他方式?**
这个问题来自this question。
9条答案
按热度按时间hts6caw31#
正如在另一个问题中所建议的,TRANSLATE函数可能会有所帮助。例如,试试这个:
退货:
也许通过一点调整,你可以得到你想要的结果......在函数的第三个参数中,你只需要指定整个字母表。有点丑,但它会工作。
7cwmlq892#
一个简单的方法是使用TRANSLATE(value,replacewith,replacelist)函数。它用第二个参数中的值替换列表(第三个参数)中的所有字符。
您可以利用它从字符串中删除所有非数字字符,包括空格。
只需使第三个参数中的列表包含所有您可能看到的不需要的字符。将它们转换到空白处,最终只会得到您想要的字符,基本上会删除不需要的字符。
注意:我包括了所有的常用符号(非字母数字),以方便其他人使用比您的示例更丰富的字符值。
更简单地说:对于您的特定值集,由于可能的字符集要小得多,因此您可以将替换列表缩减为:
注意:CHAR_COLUMN上的“UCASE”不是必需的,但是它是一个很好的增强,通过消除包括所有小写字母字符的需要来简化这个表达式。
yzckvree3#
由于上面的许多答案,您的最佳方法是使用翻译功能。然而,这种方法是不同的,因为你可以白色名单的字符,你想要,而不是黑名单的字符,你不想要。我们可以使用两次TRANSLATE函数来实现这一点。我们将使用内部翻译来生成一个字符列表,以删除外部翻译的参数。
nwlqm0z14#
只需将@Darryls99转换为UDF
这样使用
返回
mutmk8jj5#
脏字符串可以是这样的:* 'qwerty12453lala <<>7779'
我们需要清除字符串,只保留数字。
我们可以使用TRANSLATE函数删除任何多余的字符,但有一个问题:第3个参数的值太长且难看。就像这样:
所以,这不是很方便。
我的想法是-使用TRANSLATE函数2次(一次在另一次内):
让我用代码给你展示一下:
结果必须是这样的:电话:124537779
在SELECT语句中,它会像这样:
jm2pwxwz6#
一切的适当结合
select replace(translate(dirty,' ','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-=+/{}[];:.,<>?' ), ' ','') as clean
3zwtqj6y7#
使用spec_char(col 1,col 2,Col 3)作为(select Veh_Desc,Lic_plate,TRANSLATE(Lic_plate,'999999999999999999999999999999999999999999999999999999999999999999999999 ','ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1234567890')as clean_data from YourTableName)select * from spec_char where col3 <> '99999999'
这将给予你的车辆牌照包含特殊字符,即除A-Z和0-9。
lrpiutwd8#
在IBM DB2 9.5版本中是否有一种方法可以删除/删除所有非数字字母,方法如下:
SELECT replace(DATA,--somekind of regular expression--,'')FROM TABLE_A
或其他方式?
不可以。您必须创建一个User Defined Function,或者用主机应用程序的语言实现它。
nkcskrwz9#
下面的语句将从任何'string-value'中删除非字母数字字符,并在传递零长度string-value时防止SQLSTATE消息42815。