【问题标题】:Sorting in a right way numeric values separated by an apostrophe?以正确的方式对由撇号分隔的数值进行排序?
【发布时间】:2016-12-23 23:11:10
【问题描述】:

我有一个表格,其中有一些数字记录,例如:

NET_SALES 
0 
0 
318 
1'200 
10'720 
12'812
-1'285 
13'682 
40'713
-4'170 
...

我用过:

TO_CHAR(Numeric field, 'NLS_NUMERIC_CHARACTERS = ''.''''') 

但是,当我对字段进行排序时,它不会以正确的方式对其进行排序,因为首先它应该显示负数,然后是 0,然后是正数。我知道问题是因为现在该字段是字符,但我想用撇号分隔并以正确的方式对其进行排序。

我尝试再次将其转换为 TO_NUMBER,但撇号消失了...

有没有办法对它们进行排序?

非常感谢!

【问题讨论】:

  • SELECT TO_CHAR... ORDER BY TO_NUMBER...?
  • 什么是列数据类型?这个问题暗示它是一个数字,在这种情况下你只需order by numeric_field;如果它是一个字符串(a)为什么和(b)为什么使用to_char()
  • @Alex Poole,列数据类型是数字,我转换为字符串以格式化数字,添加撇号以分隔千位。
  • @jarlh 问题是我将查询传递给 .NET 上的 datagridview 并且 datagridview 对单击标题的列进行排序。
  • @AlonsoGonzálezNestal - 那么这与查询无关。您将其呈现为字符串,因此您的 datagridview 只能将其解释为字符串。为什么不将其检索为数字并使用 datagridview 对其进行格式化,而不是将其检索为字符串? (或者,按查询中的数字排序,然后……不要点击标题?)

标签: sql string oracle sorting numeric


【解决方案1】:

这个怎么样?

order by cast(replace(Numeric field, '''', '') as int)

【讨论】:

  • 谢谢,但最后我不得不在 .NET 上更改 datagridview 上的属性,因为查询我无事可做......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
相关资源
最近更新 更多