首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除文本并添加到字符串前面

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

Stack Overflow用户
提问于 2011-10-21 05:20:12
回答 3查看 417关注 0票数 0

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

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

在本例中,我要搜索以下字符'MA‘。

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

MA2237

对于查询,我的字段名是sku。

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

EN

回答 3

Stack Overflow用户

发布于 2011-10-21 05:25:11

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
OldSKU   NewSKU
-------- -----------
22378MA  MA22378
22378B   B22378
22378XYZ XYZ22378
22378TT  22378TT
票数 2
EN

Stack Overflow用户

发布于 2011-10-21 18:21:50

或者,如果后缀始终是数字后面的文本字符串,则可以使用:

代码语言:javascript
复制
;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

它会将文本(不管它有多长)放在字符串中的数字之前

票数 1
EN

Stack Overflow用户

发布于 2011-10-21 05:26:18

试试这个,看看你是否得到了你想要的结果

代码语言:javascript
复制
select sku,substring(sku,6,7)+substring(sku,1,5)
from table

如果它工作正常

代码语言:javascript
复制
  update table set sku = substring(sku,6,7)+substring(sku,1,5)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7842402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档