首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂类型的字段“字符串-数字-字符串”

复杂类型的字段“字符串-数字-字符串”
EN

Stack Overflow用户
提问于 2014-03-17 17:49:01
回答 2查看 240关注 0票数 2

基本上,我试着按一个表的名字排序。这张表比较大,但为了举例,我只张贴了一栏。列在下面的车站

代码语言:javascript
复制
Station
===
ANTIL WELL 1
ANTIL WELL 2
BASELINE & CALIFORNIA WELL
EPA WELL 6
EPA WELL 7
EPA WELL 108
EPA WELL 109
EPA WELL 110
EPA WELL 111
EPA WELL 112
EPA WELL 108S

我试着这样做,就达到了上述目的:

代码语言:javascript
复制
order by left(station,LEN(station) -PATINDEX('%[^0-9]%',REVERSE(station))+1)
,CONVERT(int,REVERSE(LEFT(REVERSE(station), PATINDEX('%[^0-9]%',REVERSE(station)) - 1)))

然而,我就是不能把EPA分类为108。我需要它在EPA 108井和EPA 109井之间,我尝试了许多不同的方法。

此外,加油站的名单在EPA之后还在继续。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-18 09:44:28

这个解决方案比选择的答案更可靠。这个答案可能不会给出预期的答案,如果有超过一个数字,如'EPA井57‘站。这个解决方案是用'0's填充数字,所以比较将考虑所有数字8位数。

代码语言:javascript
复制
DECLARE  @Table1 table([station] varchar(26))

INSERT INTO @Table1
    ([station])
VALUES
    ('ANTIL WELL 2'),
    ('ANTIL WELL 1'),
    ('BASELINE & CALIFORNIA WELL'),
    ('EPA WELL 7'),
    ('EPA WELL 6'),
    ('EPA WELL 108'),
    ('EPA WELL 109'),
    ('EPA WELL 110'),
    ('EPA WELL 111'),
    ('EPA WELL 112'),
    ('EPA WELL 108S'),
    ('EPA WELL 111108')
;

SELECT station
FROM @table1
ORDER BY 
CASE WHEN station not like '%[0-9]%' THEN station ELSE
   STUFF(station, PATINDEX('%[0-9]%',station), 0, replicate('0', 
   PATINDEX('%[0-9]%',station) - len(station) + PATINDEX('%[0-9]%',reverse(station)) + 6))
END

*GoatCD的答案不会在我的测试数据中给出正确的顺序。

票数 2
EN

Stack Overflow用户

发布于 2014-03-17 18:08:05

我需要它在EPA 108井和EPA 109井之间

然后不是按名称对其进行排序;而是通过单独的子组件对其进行排序,这些子组件也恰好包含在name列中,但顺序不同。您必须为每个子组件创建列并按子组件进行排序:

代码语言:javascript
复制
Name            sc1         sc2    sc3
EPA WELL 108    EPA WELL    108
EPA WELL 6      EPA WELL      6
EPA WELL 7      EPA WELL      7
EPA WELL 109    EPA WELL    109
EPA WELL 108s   EPA WELL    108      s

然后,您可以使用ORDER子句,例如:

代码语言:javascript
复制
ORDER BY sc1, sc2, sc3

如果要避免重复数据,请删除Name列并从子组件中组装显示名称:

代码语言:javascript
复制
SELECT sc1 + ' ' + Convert(VarChar, sc2) + sc3 AS Name

在运行时快速而容易地生成一个名称。在运行时按VarChar的可变大小的子组件排序既不快也不容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22461619

复制
相关文章

相似问题

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