我有一个字段的值如下:
id 操作人
1 张三
2 张三,李四
3 张三,李四,王五
现在我要查询 最后一次操作人等于XX的问题
我用的是:right(Intopiecesstatus,charindex(',',reverse(Intopiecesstatus))-1)
可是这样子,我在查询 张三的时候 会报 传递到 RIGHT 函数的长度参数无效。查询=李四或者=王五的就可以.
求大神给一个完美的sql查询语句
的确,存这样子数据的人,脑子肯定有问题。
用 like 不就行了。
我只需要最后一次操作记录,用like 会出现我不需要的数据~~
比如我至查询最后一次操作人是李四,如果用like 就会把最后一次操作人是王五的记录也提取出来~~
可以用like,你这个里面应该有操作的时间或者是添加记录的时间,根据时间倒序排一下即可。感觉你这样写有点不保险吧。
张三这个有可能是 张三 张三,xx,xx xx,张三,xx xx,xx,张三
入库的时候带上前后的逗号应该好点。 ,xx,xx,xx,xx。 like的时候带上前后逗号即可。
这个数据表的设计方式是有问题的,然后你想要有一个完美的查询语句。
真不知道啥叫完美。
其实我的意思很简单,在字段里 我要把最后一个值做为查询条件的匹配
@白了头发就是代价: 我的意思也很简单。这是有问题的设计。
你硬要这样的话,也很简单,先判断一次是否有“,”这个字符,就可以避免出错了。
只是这样的设计已经导致你的查询语句的性能无比低下,反正你是学生,数据表只有5行无所谓性能。
@爱编程的大叔: 咳咳,太严厉了容易造成心理创伤,毕竟咱也是从这个样子过来的
比方查询最后一个操作人是“王五”的所有记录
查询语句:select * from 表名 where 操作人 like "%王五"
select replace(right(Intopiecesstatus,charindex(',',reverse(Intopiecesstatus))),',','') 替换掉就行了..
select top 1 操作人 from TableName where 操作人 like '%张三%' order by id desc
操作人 = 李四 or 操作人 like '%,'+李四
SELECT * FORM 表名 WHERE id="张三,李四,王五";