[英]T-SQL update with switch-case statement
I want implement this pseudocode in t-sql 我想在t-sql中实现这个伪代码
UPDATE Resources SET [Path]= CASE ([Path].Substring([Path].LastIndexOf('.')))
WHEN '.jpg' THEN '/image.jpg'
WHEN '.png' THEN '/image.jpg'
WHEN '.avi' THEN '/video.jpg'
WHEN '.mkv' THEN '/video.jpg'
for it I use this solution 为此,我使用这个解决方案
UPDATE Resources SET [Path] = CASE (SUBSTRING([Path], LEN([Path]) - CHARINDEX('.', REVERSE([Path])) + 1, 3))
WHEN '.jpg' THEN '/image.jpg'
WHEN '.png' THEN '/image.jpg'
WHEN '.avi' THEN '/video.jpg'
WHEN '.mkv' THEN '/video.jpg'
END
but it is does not return expected result. 但它不会返回预期的结果。
Can anyone give me working version please? 有人能给我工作版吗?
UPDATE
Resources
SET
Path = CASE SUBSTRING(Path, LEN(Path) - CHARINDEX('.', REVERSE(Path)) + 1, 4)
WHEN '.jpg' THEN '/image.jpg'
WHEN '.png' THEN '/image.jpg'
WHEN '.avi' THEN '/video.jpg'
WHEN '.mkv' THEN '/video.jpg'
END
而不是SUBSTRING([Path], LEN([Path]) - CHARINDEX('.', REVERSE([Path])) + 1, 3)
,尝试使用lower(right([Path], 4))
Your read of the extension is wrong, instead try: 您阅读的扩展程序是错误的,而是尝试:
SUBSTRING(Path, LEN(Path) - CHARINDEX('.', REVERSE(Path)) + 1, LEN(Path))
(Using LEN(Path)
as the read length; fine if it overflows the end of the string and allows for n-character extensions) (使用
LEN(Path)
作为读取长度;如果它溢出字符串的末尾并允许n个字符扩展,则很好)
UPDATE Resources SET ThumbnailPath = CASE SUBSTRING(ThumbnailPath, LEN(ThumbnailPath) - CHARINDEX('.', REVERSE(ThumbnailPath)) + 1, LEN(ThumbnailPath))
WHEN '.doc' THEN @root + '/doc.png'
WHEN '.docx' THEN @root + '/doc.png'
WHEN '.jpg' THEN @root + '/image.png'
WHEN '.jpeg' THEN @root + '/image.png'
WHEN '.gif' THEN @root + '/image.png'
WHEN '.png' THEN @root + '/image.png'
WHEN '.ppt' THEN @root + '/ppt.png'
WHEN '.pptx' THEN @root + '/ppt.png'
WHEN '.pdf' THEN @root + '/pdf.png'
ELSE @root + '/other.png'
END
thank you I finaly use this 谢谢我最终使用它
This script will assure that you do not update all rows every time you run the script. 此脚本将确保您每次运行脚本时都不会更新所有行。 It will only update changes.
它只会更新更改。
UPDATE r
SET ThumbnailPath = newvalue
FROM Resources r
cross apply
(SELECT right(ThumbnailPath, patindex('%_.%', reverse(ThumbnailPath))) T) a
cross apply
(SELECT CASE
WHEN a.T in ('doc','docx' ) THEN @root + '/doc.png'
WHEN a.T in ('jpg','jpeg','gif','png') THEN @root + '/image.png'
WHEN a.T in ('ppt','pptx') THEN @root + '/ppt.png'
WHEN a.T = 'pdf' THEN '/pdf.png'
ELSE @root + '/other.png'
END newvalue) b
WHERE r.ThumbnailPath <> b.newvalue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.