互联网服务Db2 10.5

关于like语句的一个问题

语句1:SELECT  *
FROM  TB_SVC_SUBS_HIST A
LEFT OUTER JOIN
DTL_BILL  B  on A.SUBS_ID=B.SUBS_ID
WHERE A.MSISDN = '13400279142'

语句2:
SELECT  *
FROM  TB_SVC_SUBS_HIST A
LEFT OUTER JOIN
DTL_BILL  B  on A.SUBS_ID=B.SUBS_ID
WHERE A.MSISDN like '13400279142'


为何语句1能查出来一条记录,语句2查询结果为空呢?
参与6

4同行回答

h99h99数据库开发工程师CW
字段里面是不是有空格啊,显示全部
字段里面是不是有空格啊,收起
系统集成 · 2014-07-10
浏览910
nevermore_hcxnevermore_hcx软件开发工程师HW
回复 3# h99 我想了一下,你说的对,是我忽略了一个问题。SELECT  * FROM  TB_SVC_SUBS_HIST A LEFT OUTER JOIN DTL_BILL  B  on A.SUBS_ID=B.SUBS_ID WHERE rtrim(A.MSISDN) like '13400279142'是可以查出来结果的原因应该如下:A....显示全部
回复 3# h99

我想了一下,你说的对,是我忽略了一个问题。

SELECT  *
FROM  TB_SVC_SUBS_HIST A
LEFT OUTER JOIN
DTL_BILL  B  on A.SUBS_ID=B.SUBS_ID
WHERE rtrim(A.MSISDN) like '13400279142'

是可以查出来结果的


原因应该如下:
A.MSISDN是char(14)类型的数据,实际存储在数据库中的是11为数字,所以会有3个空格。用=去做条件查询的时候,会自动去掉多余的空格,而用like去做查询条件的时候,由于没有%或其他通配符,所以做精确匹配, '13400279142'和 '13400279142   '(数据库中实际存储的数据,后面有3个空格)是无法匹配的,所以查询结果为空。应该是这样的吧收起
互联网服务 · 2014-07-10
浏览909
nevermore_hcxnevermore_hcx软件开发工程师HW
回复 2# finix like 一定要用%么,我理解的是如果不用%,效果应该跟=差不多,就是精确匹配了。不知道这样理解对不对。%只是为了匹配其他任意字符。回复 3# 没有空格哦显示全部
回复 2# finix


like 一定要用%么,我理解的是如果不用%,效果应该跟=差不多,就是精确匹配了。不知道这样理解对不对。%只是为了匹配其他任意字符。


回复 3#

没有空格哦收起
互联网服务 · 2014-07-10
浏览878
finixfinix数据库架构师中国银行
like少%了吧显示全部
like少%了吧收起
政府机关 · 2014-07-10
浏览859

提问者

nevermore_hcx
软件开发工程师HW

相关问题

问题状态

  • 发布时间:2014-07-10
  • 关注会员:1 人
  • 问题浏览:6051
  • 最近回答:2014-07-10
  • X社区推广