回答

收藏

如何在varchar中找到5位数字?

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

基本上,我只需要获取一个5位数的数字,并用空格分隔即可。5位数字可以在varchar中的任何位置。; Y) o$ Z" Y( h4 a' l
示例:我在SQL 2008表中有一个varchar列,其中包含这些各种数据  l# D5 A: P9 o/ U
travel visa 34322 LLL001
+ F/ _( E; S, d! [1 CCoffee 34332 Jakarta
& R$ d* @' M2 N. W. n% QFDR001 34312 Taxi cost cash- Y5 g8 f* j+ Q7 N
taxi cash 34321
! q+ j. {2 `3 T2 N* x' v34556 eating dinner with customer9 x- o9 _$ L2 A: D
eating dinner 34256 with customer& @9 q4 |9 L1 ^) |; k
visa cost 34221 REF773716637366) }* U4 p* `, O3 C5 |
5位数字可以在任何空格之间分隔的地方,什么是最好的提取方法呢?$ O0 P( e& {" y2 j
34322; n  j: J! |9 p$ t3 O  h- P
34332
; V" Z8 J4 ?! Z" \3 R34312
' r6 Z) `+ i2 E; ?4 i' ?: S34556! r1 m0 @- `7 J9 a
34256
7 C8 N# |- q( N% s, U34221
% g- k4 H$ D; F, ?' E" O. m* s9 n3 }谢谢
& l3 w( U) y  _1 U( s这样的行应返回空白
5 ^/ ~, z. I# mVisa refNbr 778738878+ D) e. @4 r  D2 \
在没有运气的情况下尝试了以下内容/ f0 k0 R' f& S# r& E) w$ D& {
SELECT  pjtran.tr_comment 9 p5 f6 |. N! n5 C- O. \$ U" E3 w2 \
,substring(pjtran.tr_comment,PATINDEX('%[0-9]%',pjtran.tr_comment),5)1 a9 s: d1 z2 o$ ]  A) Q$ J
,Left(SubString(pjtran.tr_comment, PatIndex('%[0-9.-]%', pjtran.tr_comment), 50),PatIndex('%[^0-9.-]%', SubString(pjtran.tr_comment, PatIndex('%[0-9.-]%', pjtran.tr_comment), 50) + 'X')-1)0 W* Q. F/ V; i; N/ B2 s# P
,len(pjtran.tr_comment)-len(replace(pjtran.tr_comment,' ',''))
2 a9 v4 _5 m  S& z% c* m3 ^' N7 ]' P我想我需要结合使用对varchar中的空间数量进行计数。和以上。但我不确定该怎么做
/ K9 n5 C/ t% Y5 t8 V8 u                ' c: ~4 H: x; E8 e
解决方案:
0 z& H% T4 z- c6 E& f$ D" D1 `                9 O, t5 L  e2 V9 K8 u7 X9 Q9 n
, T1 D+ d! i7 I; S& w, a+ N1 T

9 E+ J6 |- p9 U                这样的事情怎么样?# G& X- E- e; Y1 ^" N/ [) w
select substring(tr_comment, patindex('%[0-9][0-9][0-9][0-9][0-9] %', tr_comment), 5) as zip5
. m/ q3 o  K8 e6 ^如果要考虑它可能位于字符串的末尾:
. q* y8 p" ]9 C0 c2 [ select substring(tr_comment, patindex('%[0-9][0-9][0-9][0-9][0-9] %', tr_comment + ' '), 5
) y; d8 Z$ T) O                 ) as zip5
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则