删除文本并添加到字符串的前面

时间:2011-10-20 21:20:12

标签: sql sql-server sql-server-2005

如何从sql查询中的字段中删除字符串(使用sql server 2005)并将其添加到字符串的前面?

例如,我的搜索字符串字段包含:22378MA

我想在这种情况下搜索以下字符'MA'。

我希望查询将此字符串添加到前面,以便它返回如下查询:

MA2237

我的字段名称是查询的sku。

不确定我是否正确解释了自己。我不想仅在视图中更改查询中返回的字段。此外,字段值发生变化,因此我无法对sku进行硬编码。另外,sku长度字段长度是可变的。对于某些查询,可能会更改后缀“MA”,因此我需要能够在案例陈述中使用它。

3 个答案:

答案 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)