回答

收藏

为什么SqlServer select语句会选择匹配的行和匹配的行并具有尾随空格的行

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

我有一个表创建与:
* u! x' s( Q! u+ u# r7 tSET ANSI_NULLS ON
' a# _+ P7 ?: kGO
1 P( a1 }& o! W  h# o' GSET QUOTED_IDENTIFIER ON* G; @! B: g& x3 i8 p) l, F
GO. i. q, B* C0 A% ]9 |9 x3 y
SET ANSI_PADDING ON
7 u" @/ s" ?" [) oGO
. Q, j4 e& i& mCREATE TABLE [dbo].[TestFeature1](
! h2 |2 ~9 L) X/ j$ D[Id] [nvarchar](50) NOT NULL,
6 a$ M# P4 V& v- m2 }7 \. _[Leng] [decimal](18, 0) NOT NULL% L5 ^7 j1 F7 T& S
) ON [PRIMARY]8 ^1 X' Y% k. H, i; t/ M
GO# ^9 F* D: b, {/ c; Q3 E+ q! s% O1 c
SET ANSI_PADDING OFF
) ^: i" ^* e& j) i/ \7 ~我用这个插入数据:
) o0 r8 U( t. T; c/ Minsert into TestFeature1 (id,leng) values ('1',100);
! u3 [0 w& v" q% z8 F$ `8 Binsert into TestFeature1 (id,leng) values ('1 ',1000);
0 d6 E% c. @% q5 t+ a- N" N当我从表中选择以下内容时:
* A5 i8 k3 |- G# ?% ^select * from TestFeature1 where id='1';
, t. y) A4 g/ o6 S& C2 h这将返回2行) g. g3 E& U( J& r0 u
1   100
( a" K# P6 _& O4 }1   10007 u7 L2 F. t; r1 x% A( _* R
为什么会这样呢?为什么即使查询指定值仅是1,但没有空格,它也返回最后带有空格的版本?' p9 Q, l0 d' a8 D% }/ H
               
' q+ K( G- f  T8 u. q2 u& n6 y解决方案:8 z; X. R* A" C
               
3 A8 c/ n  ]  q5 t8 q5 T- \
1 r1 }2 p! s3 l
* @% h! E: y) _' h; b                有趣的是,如果您使用LIKE,则可以工作:: I1 x# g2 o, `3 C8 }: |
select * from TestFeature1 where id LIKE '1'
, O5 F+ O: D/ w2 _' d9 h编辑:& @8 C5 `( [. @- [5 j
经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条件以检查列的DATALENGTH和提供的值是否相同。我更喜欢LIKE路线。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则