回答

收藏

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

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

我有一个表创建与:
& `' k. |% X; E6 D" n+ k+ VSET ANSI_NULLS ON% S% w4 v" ~3 Y7 S9 _' }3 b
GO# k* J% W8 L7 ~5 g5 P2 E( b
SET QUOTED_IDENTIFIER ON. @& n) M& N! s: X
GO
0 j9 `& l7 }7 V% l4 n( QSET ANSI_PADDING ON: [0 W- X+ p- J# r
GO3 g4 Y% E7 D2 P2 g7 e9 B
CREATE TABLE [dbo].[TestFeature1](
/ x) M# F  v! |$ `[Id] [nvarchar](50) NOT NULL,
7 a& [4 c! Y6 `. T7 _3 ~) B[Leng] [decimal](18, 0) NOT NULL
0 `$ J3 i/ v  A) ON [PRIMARY]
& i. ^6 O0 ?- }4 @GO
- u% R9 Y7 R7 KSET ANSI_PADDING OFF, C) _! ~7 |( o6 y, Q$ K
我用这个插入数据:* I4 l" h; b% g, |% J# {+ }9 t: f- f# r
insert into TestFeature1 (id,leng) values ('1',100);
! c; m5 x# I" z- J# @insert into TestFeature1 (id,leng) values ('1 ',1000);) r( T" y- K9 N8 J9 B' k3 u8 R
当我从表中选择以下内容时:; b- x# m2 N% A4 ]  c: C" _
select * from TestFeature1 where id='1';$ ^, X! o" y4 S. i, a4 |/ y0 n
这将返回2行) _$ G+ h8 H9 A& |4 R3 K
1   1009 P7 I6 j3 V  f. N8 e$ Z, Q& h* {# R2 r+ F
1   1000
* w4 K1 O7 O" d9 y/ l' y为什么会这样呢?为什么即使查询指定值仅是1,但没有空格,它也返回最后带有空格的版本?
, {) Q% o' \& l3 A, H/ x, P                / O& J3 O' v( B
解决方案:
4 N/ t  w: v" d                9 {" _% I/ v: |5 R  D. V

# y" k& y: I7 _9 \# f+ G9 k; P+ j) O6 V1 Q
                有趣的是,如果您使用LIKE,则可以工作:8 w  |  H/ _7 ^; l# D$ R( x
select * from TestFeature1 where id LIKE '1'( t5 U) O- H+ v1 h
编辑:2 z9 Q" q; [& L4 Y2 J
经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条件以检查列的DATALENGTH和提供的值是否相同。我更喜欢LIKE路线。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则