为什么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路线。 |
|
|
|
|
|