简单的关于LIKE和LEFT的问题

LWLIFE 2015-05-11 11:03:16
在使用SQL查询的过程中,如下SQL

SELECT * FROM TB WHERE NAME LIKE 'ABC@%'
SELECT * FROM TB WHERE LEFT(NAME,3)='ABC
SELECT * FROM TB WHERE SUBSTRING(NAME,1,3)='ABC

上面三个SQL都应该是查询NAME前三位是ABC的结果,
前提是数据库是肯定有ABC打头的数据,什么情况下LIKE的写法出结果,LEFT和SUBSTRING查询结果为空呢?
...全文
796 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2015-05-11
  • 打赏
  • 举报
回复
第一句多了一个@符号,是手误么
tcmakebest 2015-05-11
  • 打赏
  • 举报
回复
这是脑筋急转变或者找茬游戏么,我看结果应该是一样的吧
LWLIFE 2015-05-11
  • 打赏
  • 举报
回复
真实数据是年加上六位的流水号,ABC指的是四位的年,目前就是2015
还在加载中灬 2015-05-11
  • 打赏
  • 举报
回复
数据确实是ABC,还是指代的?
LWLIFE 2015-05-11
  • 打赏
  • 举报
回复
还不知道什么原因,把表重新建了一下好了,
还在加载中灬 2015-05-11
  • 打赏
  • 举报
回复
2015这些字符不涉及那个UNICODE,也尝试过了,我想应该不是那方面的原因
Tiger_Zhao 2015-05-11
  • 打赏
  • 举报
回复
那就对比下两个函数的执行结果
SELECT NAME, LEFT(NAME,4) FROM TB 
SELECT NAME, SUBSTRING(NAME,1,4) FROM TB

不会函数被替换了吧?
还有数据库设成什么语言?是不是区分大小写的,并且文本中有全角字符。
tcmakebest 2015-05-11
  • 打赏
  • 举报
回复
就不能好好复制么,手误还不止一处
LWLIFE 2015-05-11
  • 打赏
  • 举报
回复

SELECT * FROM TB WHERE NAME LIKE '2015%'
SELECT * FROM TB WHERE LEFT(NAME,4)='2015‘
SELECT * FROM TB WHERE SUBSTRING(NAME,1,4)='2015’
对不起,手误,原题是用ABC说明,所以长度是3,这里是2015,应该是4了,我也搞不懂,第一个SQL可以查出记录,第二三不行
Tiger_Zhao 2015-05-11
  • 打赏
  • 举报
回复
4 位的年 LEFT()、SUBSTRING() 的长度参数应该是 4 而不是 3!
SELECT * FROM TB WHERE NAME LIKE '2015%' -- 比较前4个字符,匹配
SELECT * FROM TB WHERE LEFT(NAME,3)='2015' -- 3个字符和4个字符比较,不匹配
SELECT * FROM TB WHERE SUBSTRING(NAME,1,3)='2015' -- 3个字符和4个字符比较,不匹配
LongRui888 2015-05-11
  • 打赏
  • 举报
回复
不应该呀,这也太奇怪了吧

34,871

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧