首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql单列到多个on '.‘减震器

Sql单列到多个on '.‘减震器
EN

Stack Overflow用户
提问于 2015-09-21 15:02:33
回答 2查看 68关注 0票数 1

我有一个列,其中包含abc.123def.345等数据。它基本上是一个名称,后面跟着一个.,然后是一个代码。我可以用

代码语言:javascript
复制
select 
LEFT(Campaign, ISNULL(NULLIF(CHARINDEX('.', Campaign + ' ') -1, -1), LEN(Campaign))),
STUFF(Campaign, 1, Len(Campaign) +1- CHARINDEX('.',Reverse(Campaign)), '')
 from myTable; 

输入集:

代码语言:javascript
复制
| myColumn |
| abc.123  |
| def.345  | 
|  444     |

然而,对于'444‘这样的数据,它显示:

代码语言:javascript
复制
|Name| Code |
|abc | 123  |
|def | 345  | 
|444 |      |    (SHOULD BE => |   |  444 |)

假设:数据可以没有“.”在这种情况下,我们可以根据数据类型(如Name=>Alphanumeric,Code=>Numeric )在名称或代码中插入数据。例如:这样的数据

代码语言:javascript
复制
999 =>     |     | 999 |
a24.345 => | a24 | 345 |
a72     => | a72 |     |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-21 16:01:35

用例表达式与类似的操作数一起用于区分案例:

代码语言:javascript
复制
SELECT
    CASE
    WHEN Campaign LIKE '[a-z]%' THEN LEFT(Campaign, CHARINDEX('.', Campaign + '.') - 1)
    ELSE null
    END AS Name, 

    CASE
    WHEN Campaign LIKE '[0-9]%' THEN Campaign
    WHEN Campaign LIKE '%.[0-9]%' THEN
        RIGHT(Campaign,  LEN(Campaign) - CHARINDEX('.', Campaign))
    ELSE null
    END AS Code
FROM myTable

您可以在这里看到一个例子:http://sqlfiddle.com/#!3/ae7ef7/1

票数 3
EN

Stack Overflow用户

发布于 2015-09-21 15:25:10

使用case语句:

代码语言:javascript
复制
select (case when myColumn like '%.%'
             then <your code here>
             else myColumn
        end) as code
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32698540

复制
相关文章

相似问题

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