如何从sql查询中的字段中删除字符串(使用sql server2005)并将其添加到字符串的前面?
例如,我的搜索字符串字段包含: 22378MA
在本例中,我要搜索以下字符'MA‘。
我希望查询将此字符串添加到前面,以便返回如下查询:
MA2237
对于查询,我的字段名是sku。
我不确定我的解释是否正确。我不想只更改视图中查询返回的字段。此外,字段值会发生变化,因此我不能对sku进行硬编码。另外,sku长度字段长度是可变的。对于某些查询,后缀“MA”可能会更改,因此我需要能够在case语句中使用它。
发布于 2011-10-21 05:25:11
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发布于 2011-10-21 18:21:50
或者,如果后缀始终是数字后面的文本字符串,则可以使用:
;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它会将文本(不管它有多长)放在字符串中的数字之前
发布于 2011-10-21 05:26:18
试试这个,看看你是否得到了你想要的结果
select sku,substring(sku,6,7)+substring(sku,1,5)
from table如果它工作正常
update table set sku = substring(sku,6,7)+substring(sku,1,5)https://stackoverflow.com/questions/7842402
复制相似问题