Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
C# T-SQL没有保持秩序_C#_Sql Server_Tsql - Fatal编程技术网

C# T-SQL没有保持秩序

C# T-SQL没有保持秩序,c#,sql-server,tsql,C#,Sql Server,Tsql,我已经在SQL Server控制台C中创建了一个数据库,其中有不同的组垂直添加到一行中,例如G1、G2、G3等 对于所需的内容,这是可以的,但是当像G10那样添加值时,它会自动将自身置于G1之下,而不是 G1 G2 G3 G10 看起来是这样的: G1 G10 G2 G3 SELECT * FROM mondayTable ORDER BY CAST(SUBSTRING(SAAT,2,LEN(SAAT)) AS INT) 我尝试了以下查询 SELECT * FROM mondayTa

我已经在SQL Server控制台C中创建了一个数据库,其中有不同的组垂直添加到一行中,例如G1、G2、G3等

对于所需的内容,这是可以的,但是当像G10那样添加值时,它会自动将自身置于G1之下,而不是

G1
G2
G3
G10
看起来是这样的:

G1
G10
G2
G3
SELECT * 
FROM mondayTable 
ORDER BY CAST(SUBSTRING(SAAT,2,LEN(SAAT)) AS INT)
我尝试了以下查询

SELECT * 
FROM mondayTable 
ORDER BY SAAT ASC

但它仍然保持相同的顺序,但从上到下,从下到上

下面是一个屏幕截图,显示了按描述排序时的情况:


正如评论员指出的,这是因为您的数据是按字母顺序排列的,所以排序是正确的。您可以使用以下内容:

G1
G10
G2
G3
SELECT * 
FROM mondayTable 
ORDER BY CAST(SUBSTRING(SAAT,2,LEN(SAAT)) AS INT)

正如评论员指出的,这是因为您的数据是按字母顺序排列的,所以排序是正确的。您可以使用以下内容:

G1
G10
G2
G3
SELECT * 
FROM mondayTable 
ORDER BY CAST(SUBSTRING(SAAT,2,LEN(SAAT)) AS INT)

这是正常的行为,因为您是按字符排序的。为了把它按顺序排列,我会把数字填在“G”后面

例如:

G01
G02
G03
G04
G05
G06
G07
G08
G09
G10
G11

或者如果你认为数字会达到1000

G0001
G0002
G0003
G0004
G0005
G0006
G0007
G0008
G0009
G0010
G0011

一个简单的方法是

选择“G”+右('000'+强制转换(2为varchar(4)),4)

选择“G”+右('000'+强制转换(11为varchar(4)),4)

这将产生

G0002
G0011

另一种方法可以是这样做


按类型转换排序(替换(SAAT,'G','')为INT)ASC

这是正常行为,因为您是按字符排序的。为了把它按顺序排列,我会把数字填在“G”后面

例如:

G01
G02
G03
G04
G05
G06
G07
G08
G09
G10
G11

或者如果你认为数字会达到1000

G0001
G0002
G0003
G0004
G0005
G0006
G0007
G0008
G0009
G0010
G0011

一个简单的方法是

选择“G”+右('000'+强制转换(2为varchar(4)),4)

选择“G”+右('000'+强制转换(11为varchar(4)),4)

这将产生

G0002
G0011

另一种方法可以是这样做


按类型转换的顺序(替换(SAAT,'G','')为INT)ASC

是否固定了
SAAT
列的格式?即字母表后跟数字?这是因为SAAT列是字母,所以排序是字母而不是数字。因为列中有
G
字符,它必须是数据类型
varchar
大概-作为一个字符串,它的顺序是正确的。嘿,伙计们,对不起,我应该提到
SAAT
设置为
varchar(50)
当我在Google上搜索如何在sql server中对字母数字值进行排序时,第一个答案是:
SAAT
列的格式是否已固定?即字母后跟数字?这是因为SAAT列是字母,所以排序是字母而不是数字。因为列中有
G
字符,它必须是数据类型
varchar
大概-作为一个字符串,它的顺序是正确的。嘿,伙计们,对不起,我应该提到
SAAT
设置为
varchar(50)
是我在sql server中搜索如何排序字母数字值时的第一个答案哇!怎么样!谢谢斯奎尔曼的帮助:)不过我不想打扰你,你能给我解释一下你的答案是怎么回事吗?我不想成为一个control c control v瘾君子:)@Werdna排序方式去掉数字字符,并将它们转换为整数值。由于整数值是数值,因此它提供了您要查找的排序。这确实假设字符串值开头只有一个字符,数字字符从位置2开始。感谢斯奎尔曼解释我现在明白了,再次感谢你,我希望你周末过得愉快:)哇!怎么样!谢谢斯奎尔曼的帮助:)不过我不想打扰你,你能给我解释一下你的答案是怎么回事吗?我不想成为一个control c control v瘾君子:)@Werdna排序方式去掉数字字符,并将它们转换为整数值。由于整数值是数值,因此它提供了您要查找的排序。这确实假设字符串值开头只有一个字符,数字字符从位置2开始。感谢斯奎尔曼解释我现在明白了,再次感谢你,希望你周末愉快:)