Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 仅按字符串的数字部分排序_Sql_Sql Server 2008 - Fatal编程技术网

Sql 仅按字符串的数字部分排序

Sql 仅按字符串的数字部分排序,sql,sql-server-2008,Sql,Sql Server 2008,我有一个名为Number的列,其中填充的数据列为nchar: 1 2 1091 3 20 2B 我需要一个select语句来给出以下顺序: 1 2 2B 3 20 1091 我怎样才能做到这一点?谢谢大家的帮助 编辑后的您要查找的是所谓的自然排序,它不同于大多数系统提供的常规排序。我在Stack Overflow上找到了一些文章,涵盖了各种流行SQL引擎中的自然排序,包括一篇关于SQL Server的简短讨论 这里的想法可能会让你开始寻找解决方案 不过,您可能需要更改SQL引擎的语法 找到M

我有一个名为Number的列,其中填充的数据列为nchar:

1
2
1091
3
20
2B
我需要一个select语句来给出以下顺序:

1
2
2B
3
20
1091
我怎样才能做到这一点?谢谢大家的帮助


编辑后的

您要查找的是所谓的自然排序,它不同于大多数系统提供的常规排序。我在Stack Overflow上找到了一些文章,涵盖了各种流行SQL引擎中的自然排序,包括一篇关于SQL Server的简短讨论

这里的想法可能会让你开始寻找解决方案

不过,您可能需要更改SQL引擎的语法

找到MYSQL的另一个版本:

尚未找到SQL Server的任何

编辑3

啊,这篇文章也介绍了一些SQL Server的想法:


在发现第一个非数字的位置后,可以通过转换为数字来执行一些技巧。在末尾添加一个随机字符可以使它对所有字符串都一视同仁,即使原始字符串不包含字母

SELECT [Number] FROM dbo.TableName 
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1));
使用PATINDEX,检查此代码@我正在测试时,阿伦伯特朗刚刚回答了我的问题

只是为了增加更多的价值和信息,在那里你可以找到更多的答案


检查一下,有很多有用的答案和变化。

将值从2B更改为3B的顺序?在第一部分中,第二部分3B中有2B。打字错误?你能解释一下排序背后的逻辑吗?据我所见,SQL不能按照你的要求去做。我假设那里有几个拼写错误。你到底为什么要将其存储为nchar?我质疑固定长度和Unicode的必要性。@AaronBertrand-OP需要自然排序,尽管OP没有使用“我的名字”。由于SQL引擎没有内置自然排序,因此必须使用表达式进行排序。我的链接涵盖了人们在各种形式的SQL中获得自然排序的不同方式。其中一个可能已经被修改过了,他们在Oracle或MySQL中不需要它,而且MySQL的答案似乎也没有任何针对SQL Server的有效答案,正如您所建议的那样。我发现的最接近的一个是包含MID的,但这是一个访问函数,而不是SQL Server。一些反对者能否评论出了什么问题?我只是补充了一些关于这个已经很有用的答案的信息……谢谢,有人在这个问题上投了反对票。在提供文档方面有+1,而不仅仅是一个神奇的咒语答案。我还没有否决投票,但通常如果您试图向现有答案添加信息,您可以添加注释,而不是附加答案。@AaronBertrand,当您发布您的答案时,我正要发布我的答案,请查看时差。然后我花了一些时间添加这些链接。这不是我第一次看到相同或几乎相同的答案,但差异不到一分钟。甚至是像“打我X秒”之类的评论。@JeremyJStarcher这一页上的答案是什么?来自魔法咒语?亚伦-我确实认为给未来的访问者提供正确的术语是很重要的。有时,链接到文档是一个额外的好处,在这种情况下,几乎是必需的。搜索Sql Server和convert会导致大量错误点击。。我想它可以转换成整数。你表达中的-1完全把我弄糊涂了。如果代码与我/认为/它所做的一样,也就是说,只提取数字的数字部分,那么32a、32fred和32c将是无序的,因为不考虑字母部分。@Jeremy编码问题的解决方案不必包括解决方案中使用的每一个函数的定义。我真的需要写一段关于CONVERT做什么的文章吗?OP当然不这么认为,你可能是唯一一个也会想到这一点的读者。如果需要进一步分类,则应在问题中说明。如果我假设像你建议的那样需要某种排序,那么答案比OP要求的要多。最后,我认为这个答案比你提到Oracle和MySQL的自然排序更能帮助OP吗?是的。@AaronBertrand-那么最后,我认为这个答案比你提到Oracle和MySQL自然排序更能帮助OP吗?是的,这从来没有被讨论过。@Jeremy很肯定你在下面说过,指向文档的答案比魔法咒语更好。。。难道你不应该认为你的答案与其他RDBMS的自然连接技术的链接也更好吗?@AaronBertrand-因为你提供了一个确切的解决方案,我只能提供一个答案,这是你寻找答案的下一步,毫无疑问,你的答案更好。然而,如果没有正确的答案,那么我提供的术语“自然排序”至少会给OP提供他所需要的名称。根据他的研究和数据库技能,OP可以使用我指出的技术来形成自己的解决方案。