PDA

View Full Version : انتخاب سطرهایی که فیلدشون چندمقداری هستن



as13851365
سه شنبه 25 آذر 1399, 06:35 صبح
جدولی به شرح داده ای زیر در دیتابیس mysql داریم


insert into tabattr(id,attrfield)valeus(1,"25,26,30,34"),(2,"4,5,6,7,8"),(3,"52,63,64,65")

چطوری میتونیم رکوردهایی رو برگردونیم که فیلد attrfield دارای شرطی مثلا attrfield={5,8} داشته باشن ؟

در دیتابیس postgresql با استفاده از دستورات جیسون و تعریف فیلد از نوع جیسون به صورت زیر میشه انجام داد


where attrfield->'id' @> '[118,122]'

tiphooo
شنبه 29 آذر 1399, 08:46 صبح
DECLARE @a varchar(200),@sql varchar(1000),@i smallint
SET @a='5,8'
SET @sql=''
SELECT @i=CHARINDEX(',',@a)
while @i <> 0
begin
if @sql =''
SET @sql=' WHERE ('+''''+','+''''+'+ RTRIM(attrfield) +'+''''+','+''''+') LIKE '+''''+'%,'+''''+'+'+''''+SUBSTRING(@a,1,@i-1)+''''+'+'+''''+',%'+''''
else
SET @sql=@sql+' AND ('+''''+','+''''+'+ RTRIM(attrfield) +'+''''+','+''''+') LIKE '+''''+'%,'+''''+'+'+''''+SUBSTRING(@a,1,@i-1)+''''+'+'+''''+',%'+''''


SET @a=SUBSTRING(@a,@i+1,50)


SET @i=CHARINDEX(',',@a)
end
if @sql =''
SET @sql=' WHERE ('+''''+','+''''+'+ RTRIM(attrfield) +'+''''+','+''''+') LIKE '+''''+'%,'+''''+'+'+''''+@a+''''+'+'+''''+',%'+'' ''
else
SET @sql=@sql+' AND ('+''''+','+''''+'+ RTRIM(attrfield) +'+''''+','+''''+') LIKE '+''''+'%,'+''''+'+'+''''+@a+''''+'+'+''''+',%'+'' ''


SET @sql='SELECT * FROM tabattr '+@sql


exec (@sql)