我有一个列,其中包含abc.123、def.345等数据。它基本上是一个名称,后面跟着一个.,然后是一个代码。我可以用
select
LEFT(Campaign, ISNULL(NULLIF(CHARINDEX('.', Campaign + ' ') -1, -1), LEN(Campaign))),
STUFF(Campaign, 1, Len(Campaign) +1- CHARINDEX('.',Reverse(Campaign)), '')
from myTable; 输入集:
| myColumn |
| abc.123 |
| def.345 |
| 444 |然而,对于'444‘这样的数据,它显示:
|Name| Code |
|abc | 123 |
|def | 345 |
|444 | | (SHOULD BE => | | 444 |)假设:数据可以没有“.”在这种情况下,我们可以根据数据类型(如Name=>Alphanumeric,Code=>Numeric )在名称或代码中插入数据。例如:这样的数据
999 => | | 999 |
a24.345 => | a24 | 345 |
a72 => | a72 | |发布于 2015-09-21 16:01:35
用例表达式与类似的操作数一起用于区分案例:
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
发布于 2015-09-21 15:25:10
使用case语句:
select (case when myColumn like '%.%'
then <your code here>
else myColumn
end) as codehttps://stackoverflow.com/questions/32698540
复制相似问题