我已在SQL Server 2014中的表中创建了这些记录。
Tom Cruise
Hunain
Anthony Hopkins
Aalishan
NULL
当我跑
时Select name from table1 order by name desc
然后它返回:
Tom Cruise
Hunain
Anthony Hopkins
Aalishan
NULL
当我跑
时Order by name asc
然后它返回
NULL
Aalishan
Anthony Hopkins
Hunain
Tom Cruise
嗯,好。我知道,为什么。
但是当我在neo4j的数据库中放入相同的记录并运行此查询时:
Match(n:lblNames) return n.name order by n.name desc
然后它返回:
null
"aalishan"
"Tom Cruise"
"Hunain"
"Anthony Hopkins"
并且对于asc,它返回此
"Anthony Hopkins"
"Hunain"
"Tom Cruise"
"aalishan"
null
为什么?
答案 0 :(得分:3)
看起来像Neo4j首先以大写字母排序。可能遵循ASCII排序。
https://en.wikipedia.org/wiki/ASCII
来自文档:
3.3.8.5。 Ordering null在对结果集进行排序时,null将始终位于结果集的末尾,用于升序排序,并且首先 在进行降序排序时。
在SQL Server设置中,A = a
用于排序。所以aalishan会在Anthony之前。
在Neo4J中,A < a
用于排序,意味着大写字母在小写之前。这就是汤姆在aalishan之前的原因。对于NULL,SQL Server在升序之前将NULL置于之前,Neo4J根据文档在末尾执行NULL升序。