我有一张名为“员工1”,“员工2”,“员工3”等名称的表,最后是“员工10”,员工11“,”员工12“。
当我访问所有名称时,它就像员工1,员工10,员工11,员工12,员工2,员工3等等。
即使我使用“按ID排序”或“按名称排序”,员工10先是员工1,员工2和儿子,最后是员工11,员工12。
任何帮助将不胜感激。
答案 0 :(得分:2)
请注意,排序是使用字母 ASCIIable排序完成的。排序无法识别“员工”一词后面有数字,而是将每个数字作为单独的字符处理。
我期望的顺序是
Employee 1
Employee 10
Employee 2
...
Employee 9
因为订单是由
定义的例如:
答案 1 :(得分:1)
正如Aleksi Yrttiaho已经说过的那样,员工10出现在员工2之前是完全正常的。如果你想对字符串进行排序,你必须接受有设定的规则,它不能做你想要的只是因为你喜欢它以这种方式工作。
如果您要从最旧到最近订购员工,则必须创建另一列。我建议约会(员工加入公司的日期)。可以建议增量ID,但我认为这不是最好的解决方案。有一天,您可能会认为您自己是一名员工,并在包含您的信息的表格中添加一行,您将无法正确排序。
答案 2 :(得分:1)
如果数字前面的字符串总是相同的长度(例如,它总是'员工'),您可以使用以下内容:
DateTime_match,DateTime_odds,sport,team,team_type,odds
05/11/2015 16:00:00,01/11/2015 10:37:58,NFL,New York Giants,home,1.21
05/11/2015 16:00:00,01/11/2015 10:37:58,NFL,New Orleans,away,3.5
答案 3 :(得分:0)
SELECT g.groupid,
g.groupname,
SUBSTRING(g.groupname, 1, PATINDEX('%[0-9]%', g.groupname + '0') - 1) grouptext,
CASE WHEN ISNUMERIC(SUBSTRING(g.groupname, PATINDEX('%[0-9]%', g.groupname + '0'), 100) + '.0e0') IS NOT NULL
THEN SUBSTRING(g.groupname, PATINDEX('%[0-9]%', g.groupname + '0'), 100)
ELSE 0 END groupnum
FROM Groups g
ORDER BY grouptext, groupnum;