T-SQL如何查找未使用的文本项“Photo n”?

时间:2016-08-27 11:32:29

标签: sql sql-server tsql

我允许用户使用唯一的PhotoName nvarchar(20)标记他们在我们网页上上传的照片。

我想使用默认值填充网页文本框字段,以防他们不想打扰使用唯一名称。例如。照片1,照片2等。

所以我需要检查是否已使用“照片1”,如果是,则将默认设置为“照片2”。如果使用照片2,则默认为照片3等。

他们也可以输入自己的名字,例如“玛丽的肖像”。

我可以使用任何T-SQL来搜索PhotoName列中第一个可用的“间隙”吗?例如。它可能会返回例如“Photo 78”免费使用。

1 个答案:

答案 0 :(得分:1)

在Sql Sever 2012+中使用try_parse()来过滤“photo xxxx”字符串的提醒,其中xxxx表示整数。演示:

select coalesce(max(cast (nt as int)), 0) + 1 as new_number
from ( 
     values ('photo 20'),('ph 45'),('photo a'),('photo 5.45'),('photo 1E-3')
    ) t(title)
cross apply ( 
    select nt = case when title like 'photo %' then stuff(title,1,6,'') end 
    ) c1
where TRY_PARSE(nt as int) is not null

在旧版本中使用isnumeric(nt)=1 and not nt like '%[-+$.,\E]%'