回答

收藏

从字符串中去除非数字字符

技术问答 技术问答 69 人阅读 | 0 人回复 | 2023-09-13

我目前正在做一个数据转换项目,需要从字符串中剥离所有字母字符。不幸的是,由于我们不拥有源计算机,因此我无法创建或使用函数,从而使我无法通过搜索以前的帖子找到的方法。
% p) N2 I; C5 I8 J% g" s1 I在select语句中执行此操作的最佳方法是什么?速度不是一个太大的问题,因为它只能运行30,000左右左右的记录,而且是一次过的声明。& b6 J8 m/ l- e- v# i0 `
               
) M0 @. B# _1 Z  t解决方案:
& r) G' p, z3 s, J* K% b               
( t6 u& k( K! f& e6 D0 B+ j
3 [" B2 y% p* J  M. y. g) z1 z  ~! _8 N# S
                RichardTheKiwi的脚本中用于无交叉选择的选择中的函数,还添加了点,因为在我的情况下,我将其用于varchar字段中的double和money值6 P. z# D4 |2 m/ X
CREATE FUNCTION dbo.ReplaceNonNumericChars (@string VARCHAR(5000))' N( x2 ^7 \+ j  d
RETURNS VARCHAR(1000): |+ r4 r" e( S9 U* `: g/ s
AS 7 o# t: a+ }7 M  Y$ ^/ X8 N" e9 p7 A
    BEGIN
1 a  W/ o( C5 R; C) z9 F- L        SET @string = REPLACE(@string, ',', '.')  c1 G# Q5 I$ N  ?0 ?! {$ \
        SET @string = (SELECT   SUBSTRING(@string, v.number, 1)
& K1 ]4 b6 i! n                       FROM     master..spt_values v1 H" u( k4 J# |; r1 |9 r
                       WHERE    v.type = 'P'& P3 P" h# Y( d6 S; ]
                                AND v.number BETWEEN 1 AND LEN(@string)
& T9 q9 A0 Y' O( f/ o                                AND (SUBSTRING(@string, v.number, 1) LIKE '[0-9]'! C6 q* k/ a& _  h9 d9 V
                                     OR SUBSTRING(@string, v.number, 1) LIKE '[.]')$ K! {" y0 n' a+ \$ v( X
                       ORDER BY v.number
" Y8 k+ F6 Y6 T, b                      FOR
1 O1 I# ]& R8 Q0 b                       XML PATH('')
, [6 f5 v2 W# ^/ d! @  {  K% R                      )
. N( w, S% R: X% x/ H        RETURN @string  h( `4 n; K4 V) N, U/ H
    END' A0 f& A! W$ O* R. H
GO
6 w/ n" p5 |8 T3 Z0 N/ y4 u谢谢RichardTheKiwi +1
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则