我创建了以下查询,查询在图片扩展前注入_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
3
行image_thumb
不期望
我想结果:
3 |vnc.1.jpg |vnc.1_thumb.jpg
请问有人帮我创建正确的查询吗?
答案 0 :(得分:1)
使用SUBSTRING
,LENGTH
和SUBSTRING_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 |
+------------------+