首页 新闻 会员 周边

sql查询的问题.

-1
悬赏园豆:5 [已解决问题] 解决于 2017-04-08 10:54

我有一个字段的值如下:

id   操作人

1    张三

2    张三,李四

3    张三,李四,王五

现在我要查询 最后一次操作人等于XX的问题

我用的是:right(Intopiecesstatus,charindex(',',reverse(Intopiecesstatus))-1)

可是这样子,我在查询 张三的时候 会报 传递到 RIGHT 函数的长度参数无效。查询=李四或者=王五的就可以.

 

求大神给一个完美的sql查询语句

白了头发就是代价的主页 白了头发就是代价 | 初学一级 | 园豆:7
提问于:2015-03-25 10:56
< >
分享
最佳答案
1

的确,存这样子数据的人,脑子肯定有问题。

收获园豆:5
| 小虾三级 |园豆:780 | 2015-03-28 18:12
其他回答(8)
0

用 like 不就行了。

Firen | 园豆:5385 (大侠五级) | 2015-03-25 11:23

我只需要最后一次操作记录,用like 会出现我不需要的数据~~

比如我至查询最后一次操作人是李四,如果用like 就会把最后一次操作人是王五的记录也提取出来~~

0

可以用like,你这个里面应该有操作的时间或者是添加记录的时间,根据时间倒序排一下即可。感觉你这样写有点不保险吧。

张三这个有可能是            张三            张三,xx,xx        xx,张三,xx   xx,xx,张三
入库的时候带上前后的逗号应该好点。 ,xx,xx,xx,xx。 like的时候带上前后逗号即可。

大楚打码人 | 园豆:4313 (老鸟四级) | 2015-03-25 11:34
1

这个数据表的设计方式是有问题的,然后你想要有一个完美的查询语句。

真不知道啥叫完美。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-25 11:59

其实我的意思很简单,在字段里 我要把最后一个值做为查询条件的匹配

@白了头发就是代价: 我的意思也很简单。这是有问题的设计。

你硬要这样的话,也很简单,先判断一次是否有“,”这个字符,就可以避免出错了。

只是这样的设计已经导致你的查询语句的性能无比低下,反正你是学生,数据表只有5行无所谓性能。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-25 12:26

@爱编程的大叔: 咳咳,太严厉了容易造成心理创伤,毕竟咱也是从这个样子过来的

支持(0) 反对(0) 焰£天琊 | 园豆:418 (菜鸟二级) | 2015-03-26 11:26
1

比方查询最后一个操作人是“王五”的所有记录

查询语句:select * from 表名 where 操作人 like "%王五"

xcxEpik | 园豆:245 (菜鸟二级) | 2015-03-25 19:12
0

select replace(right(Intopiecesstatus,charindex(',',reverse(Intopiecesstatus))),',','') 替换掉就行了..

_jie | 园豆:116 (初学一级) | 2015-03-26 15:14
0

select top 1  操作人  from TableName where  操作人 like '%张三%' order by id desc

勇敢的肺 | 园豆:173 (初学一级) | 2015-06-04 17:28
0

操作人 = 李四 or 操作人 like '%,'+李四

.悟 | 园豆:213 (菜鸟二级) | 2015-06-04 21:58
0

SELECT * FORM 表名 WHERE id="张三,李四,王五";

猿哥爱码 | 园豆:258 (菜鸟二级) | 2015-08-27 20:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册