Mysql选择查询字符串操作

时间:2014-03-26 17:32:37

标签: mysql sql

我创建了以下查询,查询在图片扩展前注入_thumb,但查询无法在所有条件下工作,

 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_id 3image_thumb不期望

我想结果:

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

请问有人帮我创建正确的查询吗?

2 个答案:

答案 0 :(得分: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`

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

答案 1 :(得分: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 |
+------------------+