2014-03-26 23 views
1

我已经创建了下面的查询,查询图像扩展之前注入_thumb,但查询是不是在所有条件下工作,Mysql的选择查询字符串操作

SELECT `user_id`,`image`, 
CONCAT(SUBSTRING_INDEX(`image`,'.',1),'_thumb.',SUBSTRING_INDEX(`image`,'.',-1)) 
as `image_thumb` 
FROM `user_details` 

结果

user_id |image  |image_thumb 
--------|-----------|-------------------- 
    1 |gk1.JPG |gk1_thumb.JPG 
    2 |Tulips.jpg |Tulips_thumb.jpg 
    3 |vnc.1.jpg |vnc_thumb.jpg 
    4 |NULL  |NULL 
    10 |NULL  |NULL 

user_id3image_thumb不是预期的

我想要结果:

3 |vnc.1.jpg |vnc.1_thumb.jpg 

你可以请任何人帮我创建正确的查询吗?

回答

1

使用SUBSTRINGLENGTHSUBSTRING_INDEX组合:

SELECT `user_id`, 
     `image`, 
     CONCAT(
     SUBSTRING(`image`, 
        1, 
        LENGTH(`image`) - LENGTH(
             SUBSTRING_INDEX(`image`,'.',-1) 
            )-1 
     ), 
     '_thumb.', 
     SUBSTRING_INDEX(`image`,'.',-1) 
) as `image_thumb` 
FROM 
    `user_details` 

(我试图将查询格式化为reada尽可能)

+0

查询工作很好,谢谢你 – Girish

0

也许是这样的:

> select @extension:=substring_index('vnc.1.JpG','.',-1) ext, 
replace('vnc.1.JpG',@extension,concat('_thumb.',@extension)) thumb; 
+-----+------------------+ 
| ext | thumb   | 
+-----+------------------+ 
| JpG | vnc.1._thumb.JpG | 
+-----+------------------+ 

或替换变量的用法与多次调用SUBSTRING_INDEX:

> select replace('vnc.1.JpG', 
       substring_index('vnc.1.JpG','.',-1), 
       concat('_thumb.',substring_index('vnc.1.JpG','.',-1))) thumb; 
+------------------+ 
| thumb   | 
+------------------+ 
| vnc.1._thumb.JpG | 
+------------------+ 
+0

感谢您的快速回复,但这个查询只会与'user_id'' 3'和其他行的结果错误, – Girish