Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL中的Order BY_Sql Server 2005 - Fatal编程技术网

Sql server 2005 SQL中的Order BY

Sql server 2005 SQL中的Order BY,sql-server-2005,Sql Server 2005,在我的SQL语句中,需要解析一个标题字段,这样我就可以按整数排序。基本上,只需将整数提取到一个新字段中,并对该字段进行排序 标题字段中的数据如下所示(错误): 订购人之后(正确) 谢谢。您可以使用PATINDEX功能: SELECT CAST(SubString(REPLACE(Title,'-',''), PATINDEX('%[0-9]%',REPLACE(Title,'-','')), Len(REPLACE(Title,'-',''))) AS INT

在我的SQL语句中,需要解析一个标题字段,这样我就可以按整数排序。基本上,只需将整数提取到一个新字段中,并对该字段进行排序

标题字段中的数据如下所示(错误):

订购人之后(正确)


谢谢。

您可以使用PATINDEX功能:

SELECT 
    CAST(SubString(REPLACE(Title,'-',''),
    PATINDEX('%[0-9]%',REPLACE(Title,'-','')),
    Len(REPLACE(Title,'-',''))) 
    AS INT)
AS [Title Number],*
FROM [Your table-name here] 
ORDER BY [Title Number]
编辑:现在将使用连字符


注意:如果标题的非数字部分有数字或连字符(“-”),则不起作用。

不完全清楚要按字段的哪一部分排序。你能根据你所显示的输入用预期的输出更新问题吗?还有-在那里你也打算删除它吗?因此,您只需要对标题的数字部分进行排序?条目是否始终采用“测试标题AA xyz ab”的形式?您需要按xyz或xyzab排序?如果有限制,允许的最大连字符数是多少?您的示例不符合您给出的规则。如果排序首先基于最后一个值,那么以
TT TEST 1 UU
开头的行应该排序,所有行都以
-1
开头。您给出的解决方案只是有点偏离……下面是它产生的排序:(1)TT TEST 1 UU 25-1(2)TT TEST 1 UU 420-1(3)TT TEST 1 UU 55-46(4)TT TEST 1 UU 600-8-10(5)TT TEST 1 UU 608-20(6)TT TEST 1 UU 750-1(7)TT TEST 750-1(8)TT TEST 80-1
我想说你现在可能已经有了修复它的信息了。是的,正如我所说,如果非索引部分有数字(比如你的例子中的1),那么它将不起作用。您可以尝试反转标题(使用REVERSE()),提取数字索引,然后反转索引并将其转换为INT,然后进行排序。让我知道你是否能够这样做..可能做一个存储过程,并使用临时表来做这件事,使脚本看起来不那么混乱..更好的是,颠倒标题。('TT TEST 1 UU 25-1'变为'1-52 UU 1 TSET TT'),将子字符串转换到第一个空格(即'1-52'),将连字符('-')替换为空字符('')(变为'152'),将字符串反转(变为'251'),并将其转换为[Title number](INT))并进行排序。。
TT TEST 80-1
TT TEST 750-1
TT TEST 1 UU 25-1
TT TEST 1 UU 55-46
TT TEST 1 UU 420-1
TT TEST 1 UU 600-8-10
TT TEST 1 UU 608-20
TT TEST 1 UU 750-1
SELECT 
    CAST(SubString(REPLACE(Title,'-',''),
    PATINDEX('%[0-9]%',REPLACE(Title,'-','')),
    Len(REPLACE(Title,'-',''))) 
    AS INT)
AS [Title Number],*
FROM [Your table-name here] 
ORDER BY [Title Number]