如何从sql查询中的字段中删除字符串(使用sql server 2005)并将其添加到字符串的前面?
例如,我的搜索字符串字段包含:22378MA
我想在这种情况下搜索以下字符'MA'。
我希望查询将此字符串添加到前面,以便它返回如下查询:
MA2237
我的字段名称是查询的sku。
不确定我是否正确解释了自己。我不想仅在视图中更改查询中返回的字段。此外,字段值发生变化,因此我无法对sku进行硬编码。另外,sku长度字段长度是可变的。对于某些查询,可能会更改后缀“MA”,因此我需要能够在案例陈述中使用它。
答案 0 :(得分:2)
select SKU as OldSKU, case
when CHARINDEX('MA', SKU) = LEN(SKU) - 1
then 'MA' + SUBSTRING(SKU, 1, LEN(SKU) - 2)
when CHARINDEX('B', SKU) = LEN(SKU)
then 'B' + SUBSTRING(SKU, 1, LEN(SKU) - 1)
when CHARINDEX('XYZ', SKU) = LEN(SKU) - 2
then 'XYZ' + SUBSTRING(SKU, 1, LEN(SKU) - 3)
else SKU
end as NewSKU
from (
select '22378MA' as SKU
union all
select '22378B'
union all
select '22378XYZ'
union all
select '22378TT'
) a
<强>输出:强>
OldSKU NewSKU
-------- -----------
22378MA MA22378
22378B B22378
22378XYZ XYZ22378
22378TT 22378TT
答案 1 :(得分:1)
或者,如果您的后缀始终是数字后面的文本字符串,则可以使用:
;with data as
(
SELECT '22378MA' as sku UNION ALL
SELECT '22444378B' as sku UNION ALL
SELECT '12345GHJ' as sku UNION ALL
SELECT '78456M' as sku
)
SELECT
sku
,RIGHT(sku,LEN(sku) - PATINDEX('%[A-Za-z]%',sku) + 1) + '' + LEFT(sku,PATINDEX('%[A-Za-z]%',sku) - 1) as sku2
from data
将文本(无论多长时间)放在字符串
中的数字之前答案 2 :(得分:0)
试试看你是否得到了你想要的结果
select sku,substring(sku,6,7)+substring(sku,1,5)
from table
如果运作正常
update table set sku = substring(sku,6,7)+substring(sku,1,5)